我需要创建一个动物园将用于跟踪他们的动物和员工等的数据库。我唯一需要帮助的是服务表,它将用于记录对动物执行的服务,例如,接种疫苗或健康检查。需要记录的信息是执行服务的员工(假设只有一名员工负责每项服务),服务的动物,执行的服务以及执行的日期/时间。
我的主要问题是在第一个表中显示的复合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 |
+-------------------+
答案 0 :(得分:1)
首先,不要将日期和时间分成两列。将单列称为“service_time”。
如果列{animal_id,employee_id,service_type,service_time}唯一标识一行,则必须对该列列具有唯一约束,无论您是否决定使用代理键。如果不使用代理键,则该约束通常声明为primary key
。如果你做使用代理键,那么该约束通常被声明为unique
,对该集合中的每一列都有单独的not null
约束。
如果没有任何表具有此的外键引用,则绝对没有必要创建一个附加列作为代理键。就个人而言,即便如此,我也不会在这张桌子上使用代理键。我知道怎么写连接。无论如何,大多数图形查询工具都会为您进行连接。