首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为两个具有多到多关系的MySQL表创建默认关系?

如何为两个具有多到多关系的MySQL表创建默认关系?
EN

Stack Overflow用户
提问于 2015-05-17 08:12:41
回答 2查看 356关注 0票数 1

在MySQL中,我有两个表,AB,具有多到多个关系。我有一个支点表,A_B,用于表A和表B之间的关系。

在表A中,有一些行我希望链接到*ALL* (包括当前和未来) table B中的行。例如,假设当前table B中有5行。table A中的行table A链接到table B中的所有5行。将来,当新行被添加到table B时,我希望行A2自动链接到table B中的所有新行。

目前,我正在考虑使用MySQL触发器来添加这个函数。但我不知道这是否正确的做法。

或者我应该在table A中添加一个新列,并使用它作为默认关系的指示符?然后,在我的编程代码中,我可以检查列值,table A中的一行是否与table B中的所有行相关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-19 16:28:05

枢轴台

在关系数据库术语中,这是一个关联表。

您所拥有的是一种需求,即Table_A中指定的行与Table_B中的所有行相关;其余的通过Table_A_B关联。伟大的E F Codd博士要求我们从集合的角度来考虑数据。在Table_A中有两个集合,让我们调用第一个集合All_B和第二个集合Specific_B,Table_A_B为它们标识特定的关系。

因此,它不是一个“默认”关系,而是两个独立的关系,基于子类型。

你不需要你描述的“默认”关系。这将导致大量没有用途的行,因为Table_B for All_B中的行是已知的,因此不需要存储它们。

您不需要触发器(只要插入了Table_A_B行,就必须继续插入All_B行)。丑陋得像罪恶。

正确的方法是使用以集合命名的排它子类型,其中:

  • Specific_B是通过Table_A_B与Table_B相关的
  • Table_A本身和All_B没有任何关系。

您的代码可以确定任何Table_A行的哪个子类型,并相应地加入Table_B:

  • 通过Table_A_B实现Specific_B
  • 笛卡尔乘积Table_A::Table_B for All_B.

图片

Typical XOR Gate • Table Relation Diagram

排他子类型需要基本类型中的判别器列。

如果您不想费心于完整的关系完整性,那么当然,Table_A中的指示列就足够了。这是Table_A中的判别器列,减去子类型。

对评论的答复

这是我第一次学习排他性子类型的概念。现在我知道如何解决这个问题了

在这种情况下,请在Subtypes上学习此文档。链接包括您需要的代码,因此完整性是声明性的。如果你想要进行充分的讨论,特别是避免被那些声称是理论家的马戏团怪胎所诱惑,他们兜售疯狂的方法来实施“正直”,请阅读this Answer

票数 3
EN

Stack Overflow用户

发布于 2015-05-17 09:30:21

我认为使用database triggers是做您想做的事情最合适的方式,因为它从程序中保存了DB的independence,并且DB本身就完成了。

但是,您可能会考虑使用Grouping concept,因为它在用户帐户管理DB中使用。您可以创建一个组(如admins ),并将表B的所有记录关联到它,并且只将A的记录分配给这个组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30284761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档