如何以编程方式分析以了解两个表之间存在多对多关系?

时间:2011-07-17 19:59:45

标签: c# java sql database many-to-many

当我查看Db架构或图表时,很明显可以确定两个表之间是否存在多对多关系。

但是我如何从计算机的角度来分析这一点呢?代码应该遵循什么样的测试算法来确定TableA和TableB之间存在多对多的关系?

如果您可以在不使用任何特定语言的方法或帮助者的情况下提出建议,我将不胜感激。

类似的东西:

  

“如果'这个'是真的,那么绝对是多对多的   2个表之间的关系。“

那么我应该在'this'的地方写些什么?

由于

5 个答案:

答案 0 :(得分:1)

我认为这是一个非常棘手的问题,因为您可以在应用程序的上下文中推断出多对多的关系。

例如,一个表Person可以有一个表的外键,PostalAddress(描述它们居住的地方),以及表CoffeeMachine的外键(描述他们允许使用的咖啡机)。

依赖于带有两个表的外键的表的存在可能会导致您推断出PostalAddress和CoffeeMachine(生活在特定地址的人们使用的咖啡机)之间存在多对多关系在申请的背景下无关紧要。

您也不应该依赖只有外键到其他表的链接表,因为可能有其他属性描述关系的某些内容(例如,某个人对特定项目执行的角色)。

虽然我们使用链接表来建模多对多关系,但我认为没有任何关于这样的表可以推断出逆向。

答案 1 :(得分:1)

  

“如果'这个'是真的,那么绝对是多对多的   2个表之间的关系。“

     

那么我应该在'this'的地方写些什么?

  • 还有第三张桌子。
  • 它包括至少两个外键:至少一个来自TableA的候选键 表格B中至少有一个候选键。
  • PRIMARY KEY约束或NOT NULL UNIQUE约束 那对外键。

答案 2 :(得分:0)

存在不等于A或B的表C,其外键对应于A和B中的主键。

只是一个猜测。不过,我认为这是真的;当你想要一个m2m的关系时肯定会发生这种情况......当它恰好发生时,我认为你可以阅读m2m关系。

答案 3 :(得分:0)

如果您的链接表仅包含连接其他两个表的外键,并且两个列都没有唯一约束,那么您将拥有多对多关系。如果你的任何一个表直接引用另一个,你就有一个(或零)到多个关系。

答案 4 :(得分:0)

这个问题很有意思,但它只是要求足够的条件。我认为如果要求必要且充分的条件会更有趣。

  

当我查看Db架构或图表时,显而易见可以确定两个表之间是否存在多对多关系。

是吗?试试这个:

  • ChildTest之间是否存在多对多关系?
  • ParentTest之间是否存在多对多关系?

db:

Parent
------
id
PRIMARY KEY: id

Child
-----
id
parentid
... other data
PRIMARY KEY: id
FOREIGN KEY: parentid
    REFERENCES Parent(id)

Test
----
testid
... other data
PRIMARY KEY: testid

BestChild
---------
testid
parentid
childid
... other data
PRIMARY KEY: (testid, parentid)
FOREIGN KEY: (childid, parentid)
    REFERENCES Child(id, parentid)
FOREIGN KEY: testid
    REFERENCES Test(id)