问题
I am stuck in a problem where i have to find cardinality of a relationship between tables using mysql. Following this post
MySQL: How to determine foreign key relationships programmatically?
I have found all tables related to my table and the columns which are foreign key. Now i also want to find the cardinality of relationship i.e. one-to-one, one-to-many or many-to-many. Any ideas or snippets would be highly appreciated
回答1:
Let us assume that table A has a foreign key f which refers to the primary key k of table B. Then you can learn the following from the schema:
- If there is a
UNIQUEconstraint onA.f, then there can be at most one row inAfor every row inB. Note that in the case of multi-column indices, all columns of the unique constraint must be part of the foreign key. You can useSHOW INDEX FROM tablename WHERE Non_unique = 0to obtain information on the uniqueness constraints of a table. - If
A.fis declaredNOT NULL, then there will always be at least one row inBfor every row inA. You can useSHOW COLUMNS FROM tablenameto list the columns and see which of them allowNULLvalues.
If you interpret “one” as “zero or one”, then you get a one-to-one relation using a unique constraint, and a many-to-one relation (i.e. many rows in A referring to one row in B) without such a unique constraint.
A many-to-many relation would be modeled using a separate table, where each row represents one element of the relation, with many-to-one relations for both foreign keys it contains.
来源:https://stackoverflow.com/questions/12618285/how-to-determine-cardinality-of-foreign-key-using-mysql