1

我想如果这个简单的数据库建模很好。特别是帐单表。各位可以发表一下意见吗?

图式

4

2 回答 2

3

将外键列作为表的主键的一部分是完全可以接受的。例如,这在实现多对多关系的交集表中经常发生。

有些人发现使用代理键而不是复合键更可取。当您使用外键列作为主键时,您几乎总是使用复合键,这些可能会变得庞大而复杂。

如果您在 StackOverflow 和其他地方搜索,您会发现关于自然键与复合键与代理键的相对优点的广泛而热情的讨论。如果您阅读这些内容,您会发现有很多人会支持您在模型中定义主键的方式。

于 2012-11-16T12:34:54.053 回答
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

如果这是您的意图,那么您将朝着正确的方向前进。

于 2012-11-16T12:40:25.603 回答