我想如果这个简单的数据库建模很好。特别是结算表。 你们能发表意见了吗?
答案 0 :(得分:3)
将外键列作为表的主键的一部分是完全可以接受的。例如,在交集表中经常发生这种情况,实现了多对多关系。
有些人发现最好使用代理键而不是复合键。当您使用外键列作为主键时,您几乎总是使用复合键,这些可能会变得庞大而复杂。
如果您在StackOverflow和其他地方搜索此处,您可以找到关于自然与复合与代理键的相对优点的广泛而热烈的讨论。如果您阅读这些内容,您会发现有很多人会支持您在模型中定义主键的方式。
答案 1 :(得分:3)
我想你问的是,EmployeeProject中的主键是否可以包含两个外键。如果我理解你的问题,那很好。
在Billing中,拥有一个由两列引用EmployeeProject的外键是没有错的。 (在SQL中,foreign key (empNo, projectNo) references EmployeeProject (empNo, projectNo)
。)您几乎肯定不想要在这里引用Employee和Project的两个单独的外键。
Billing中的三列主键(SQL,primary key (billingNo, empNo, projectNo)
)允许这样的数据。
billingNo empNo projectNo hoursBilled
--
1003 13 7 3
1003 13 6 2
1003 17 7 8
1004 13 7 3
1004 13 6 2
如果这是你的意图,那么你就会朝着正确的方向前进。