5 Field Composite PK vs Surrogate PK

时间:2013-02-07 23:13:14

标签: database relational-database primary-key composite-key

我需要创建一个动物园将用于跟踪他们的动物和员工等的数据库。我唯一需要帮助的是服务表,它将用于记录对动物执行的服务,例如,接种疫苗或健康检查。需要记录的信息是执行服务的员工(假设只有一名员工负责每项服务),服务的动物,执行的服务以及执行的日期/时间。

我的主要问题是在第一个表中显示的复合PK和第二个表中显示的代理PK之间进行选择。您能否就最适合哪种设计以及每种方法的利弊给出您的意见。

提前感谢您的帮助。

+-----------------------+
|  Service              |                     
+-----------------------+
| (PK)(FK1) animal_id   |
| (PK)(FK2) employee_id |
| (PK) service_type     |
| (PK) date             |
| (PK) time             |
+-----------------------+

+-------------------+
|  Service          |                     
+-------------------+
| (PK) service_id   |
| (FK1) animal_id   |
| (FK2) employee_id |
| service_type      |
| datetime          |
+-------------------+

1 个答案:

答案 0 :(得分:1)

首先,不要将日期和时间分成两列。将列称为“service_time”。

如果列{animal_id,employee_id,service_type,service_time}唯一标识一行,则必须对该列列具有唯一约束,无论您是否决定使用代理键。如果不使用代理键,则该约束通常声明为primary key。如果你使用代理键,那么该约束通常被声明为unique,对该集合中的每一列都有单独的not null约束。

如果没有任何表具有的外键引用,则绝对没有必要创建一个附加列作为代理键。就个人而言,即便如此,我也不会在这张桌子上使用代理键。我知道怎么写连接。无论如何,大多数图形查询工具都会为您进行连接。