如何使用mysql确定外键的基数

时间:2012-09-27 09:32:56

标签: mysql foreign-keys relationship cardinality

我遇到了一个问题,我必须使用mysql找到表之间关系的基数。关注此帖子MySQL: How to determine foreign key relationships programmatically?
我找到了与我的表和外键相关的所有表。现在我也想找到关系的基数,即一对一,一对多或多对多。任何想法或片段都将受到高度赞赏

1 个答案:

答案 0 :(得分:5)

我们假设表A有一个外键f,它引用表k的主键B。然后,您可以从架构中学习以下内容:

  • 如果UNIQUE上存在A.f约束,那么A中每行B最多只能有一行SHOW INDEX FROM tablename WHERE Non_unique = 0。请注意,对于多列索引,唯一约束的所有列必须是外键的一部分。您可以使用A.f获取有关表的唯一性约束的信息。
  • 如果NOT NULL被声明为B,那么A中的SHOW COLUMNS FROM tablename中的每一行都会至少一行<{1}}。您可以使用NULL列出列,并查看哪些列允许A值。

如果您将“one”解释为“0或1”,那么您将使用唯一约束获得一对一关系,并且多对一 relation(即B中的许多行引用{{1}}中的一行),没有这样的唯一约束。

多对多关系将使用单独的表建模,其中每一行代表关系的一个元素,多对一关系它包含的两个外键。