3

我希望这里可能是一个简单的答案,但似乎是一个难以置信的问题。外键复制?

如果你有一个外键本质上出现在表中两次,来自两个组合键那么FK必须定义两次(存在两个独立的属性)?

这里有一些简单模型来可视化我问的东西。防爆。 1显示了Table1Id的FK作为单一属性。防爆。图2示出了作为两个不同属性的Table1Id的FK(标识为Table1Id_FKTable2 & Table1Id_FKTable3)。

取决于你想完成的是这两个模型是否有效? enter image description here

回答

3

通常,table1ID_FKTable2更好地称为“角色”即表1相对于表4起。

而且类似地,table1ID_FKTable3是Table1在Table4中扮演的角色。

角色的思想是无处不在的。两名员工属于同一家公司,但可能有不同的角色,一个是董事会成员,另一个是兼职,每小时一个。

+0

我通过改变我的建模程序中的角色来制作这些模型。我承认我很难将这个问题转化为言辞......嘿嘿。好的,你必须将角色分开并将它们定义为Ex.2所示,或者可以将角色定义为Ex并且存在与Ex相同。 1? – swisscheese 2011-04-04 19:13:13

+0

@swisscheese:我引用了来自例子2的名字,因为这些名字明确说明了角色。你不能优化角色的存在。如果这是问题的一部分,则必须保留它们。例2是来自例1的* * * *模型。例2是正确的**如果**你必须有不同的角色。 – 2011-04-04 19:15:03

+0

非常感谢您的帮助。在使用组合键变得相当长的数据库模型时,出现了这个问题。我想我需要回顾一下我的组合键的相关性。 – swisscheese 2011-04-04 19:18:03

0

我想了解您的问题,但如果Table2的主键是Table1Id和Table2Id的组合,那么您需要使用这两个字段在Table4中创建一个外键。表3的情况也是如此。

ALTER TABLE Table4 ADD constraint fk_tab2 foreign key references Table2(Table1Id, Table2Id) 
ALTER TABLE Table4 ADD constraint fk_tab3 foreign key references Table3(Table1Id, Table3Id) 
0

您的图形不会“可视化您所问的内容”,因为您的图形根本不包含任何组合键。

但是,如果你的问题是(类似于)“table4中的一个单一属性可以被声明为外键BOTH到表2和表3?”,那么答案是肯定的。

如果按照你希望的方式工作,如果你在整个地方使用ID字段,但是关系模型甚至SQL标准都不能阻止它,那就不太可能。

+1

我在我的问题中强调了简单这个词,希望避免敲我的术语(当涉及到DB时,我仍在学习,因此我的问题中的披露)。除非你知道我的数据,否则你不能说Id只是一个虚假的术语或代用钥匙。只是为了继续你的观点,你为什么不指出我不应该命名我所有的桌子? – swisscheese 2011-04-04 20:10:48