Database 5场复合PK与替代PK
我需要创建一个数据库,动物园将使用该数据库来跟踪其动物和员工等。我唯一需要帮助的是服务表,该表将用于记录对动物执行的服务,例如,疫苗接种或健康检查。需要记录的信息包括执行服务的员工(假设每个服务只有一名员工负责)、正在接受服务的动物、执行的服务以及执行的日期/时间 我的主要问题是在第一个表中显示的复合PK和第二个表中显示的代理PK之间进行选择。你能告诉我你对哪种设计最合适的看法以及每种方法的优缺点吗 提前感谢您的帮助Database 5场复合PK与替代PK,database,relational-database,primary-key,composite-key,Database,Relational Database,Primary Key,Composite Key,我需要创建一个数据库,动物园将使用该数据库来跟踪其动物和员工等。我唯一需要帮助的是服务表,该表将用于记录对动物执行的服务,例如,疫苗接种或健康检查。需要记录的信息包括执行服务的员工(假设每个服务只有一名员工负责)、正在接受服务的动物、执行的服务以及执行的日期/时间 我的主要问题是在第一个表中显示的复合PK和第二个表中显示的代理PK之间进行选择。你能告诉我你对哪种设计最合适的看法以及每种方法的优缺点吗 提前感谢您的帮助 +-----------------------+ | Service
+-----------------------+
| 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}唯一标识一行,则无论您是否决定使用代理键,都必须对该列集合具有唯一约束。如果不使用代理键,则该约束通常声明为
主键
。如果确实使用代理键,则该约束通常声明为唯一
,在该集中的每个列上都有单独的非空
约束
如果没有任何表具有对此表的外键引用,则绝对没有必要创建额外的列作为代理键。就我个人而言,即使在那时,我也不会对这个表使用代理键。我知道如何写连接。无论如何,大多数图形查询工具都会为您进行连接