Database 5场复合PK与替代PK

Database 5场复合PK与替代PK,database,relational-database,primary-key,composite-key,Database,Relational Database,Primary Key,Composite Key,我需要创建一个数据库,动物园将使用该数据库来跟踪其动物和员工等。我唯一需要帮助的是服务表,该表将用于记录对动物执行的服务,例如,疫苗接种或健康检查。需要记录的信息包括执行服务的员工(假设每个服务只有一名员工负责)、正在接受服务的动物、执行的服务以及执行的日期/时间 我的主要问题是在第一个表中显示的复合PK和第二个表中显示的代理PK之间进行选择。你能告诉我你对哪种设计最合适的看法以及每种方法的优缺点吗 提前感谢您的帮助 +-----------------------+ | Service

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

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

首先,不要将日期和时间分为两列。将这一列称为“服务时间”

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

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