2

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

我的主要问题是在第一个表中显示的复合 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          |
+-------------------+
4

1 回答 1

1

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

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

如果没有任何表具有对该表的外键引用,那么创建一个附加列作为代理键绝对没有意义。就个人而言,即使在那时我也不会为这张表使用代理键。我知道如何写一个连接。无论如何,大多数图形查询工具都会为您完成连接。

于 2013-02-08T00:11:44.190 回答