我为兽医诊所创建了一个数据库。
我有一个名为约会的表,这就是它包含的内容。
appointment_id, patient_id, customer_id, staff_id, date_time
- 每个客户(所有者)都有一个病人(宠物)。
- 由一名工作人员进行预约。
那么我的表结构对吗?它的意思是3nf。
不它不是。
appointments
和之间存在传递依赖patients
。考虑这个更新异常:
UPDATE appointments
SET appointments.patient_id = 42
WHERE appointments.appointment_id = 1;
/* hey that's not my dog!
*/
如果患者和客户是一对一的,则将患者 ID 存储在客户表中并通过连接引用它。
如果它们是一对多的,则将客户 ID 存储在每个患者的患者表上。
让我用简单的话解释一下,
第三范式的条件:
- 它是第二范式
- 没有传递函数依赖
在这种关系中,考虑
约会ID为A
患者 ID 为 B
customer_id 为 C
在你的关系中,A->B
B->C 和 A->C
因此,存在传递函数依赖。
所以,它不在3NF中。
希望能帮助到你。