我遇到了一个问题,我必须使用mysql找到表之间关系的基数。关注此帖子MySQL: How to determine foreign key relationships programmatically?
我找到了与我的表和外键相关的所有表。现在我也想找到关系的基数,即一对一,一对多或多对多。任何想法或片段都将受到高度赞赏
答案 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}}中的一行),没有这样的唯一约束。
多对多关系将使用单独的表建模,其中每一行代表关系的一个元素,多对一关系它包含的两个外键。