我需要创建一个数据库,动物园将使用该数据库来跟踪他们的动物和员工等。我唯一需要帮助的是服务表,该表将用于记录对动物执行的服务,因为例如,疫苗接种或健康检查。需要记录的信息包括提供服务的员工(假设只有一名员工负责每项服务)、接受服务的动物、提供的服务以及提供服务的日期/时间。
我的主要问题是在第一个表中显示的复合 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 |
+-------------------+
最佳答案
首先,不要将日期和时间分成两列。将该单个列称为“service_time”。
如果列集 {animal_id, employee_id, service_type, service_time} 唯一标识一行,则无论您是否决定使用代理键,您必须对该列集有唯一约束.如果您不使用代理键,则该约束通常声明为 primary key
。如果您确实使用代理键,则该约束通常被声明为唯一
,并且对该集合中的每一列都有单独的not null
约束。
如果没有任何表具有对这个 表的外键引用,则绝对没有必要创建一个额外的列作为代理键。就我个人而言,即便如此,我也不会为此表使用代理键。我知道如何编写连接。无论如何,大多数图形查询工具都会为您进行连接。
关于database - 5场复合PK vs代理PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762896/