数据库设计 - 外键与主键相同?

时间:2012-11-16 06:57:54

标签: database ms-access database-design

我想如果这个简单的数据库建模很好。特别是结算表。 你们能发表意见了吗?

schema

2 个答案:

答案 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

如果这是你的意图,那么你就会朝着正确的方向前进。