我是否正确地规范了这张桌子?

时间:2015-10-18 03:52:24

标签: mysql sql database normalization database-normalization

user view

我对如何从1NF到2NF感到困惑,因为我的1NF有3个主键(我不熟悉在一个表中使用3个主键,但我相信这是最好的选择)。我的尝试列在下面。如果不正确以及我如何改进,请告诉我。

非标准化表

[Patient#, Patient_Name, First_Seen,  Social_Worker, (Visit_Date, Visit_Time, 

Visit_Reason, New_Symptm, LevelofPain)]

1NF表

**Patient_Visit_Time** [Patient#(PK), Visit_Date(PK), Visit_Time(PK), Visit_Reason, 

New_Symptm, LevelofPain, Patient_FirstName, Patient_LastName, First_Seen,   

SocialWorker_FirstName, SocialWorker_LastName] 

2NF表

**Patient** [Patient#(PK), Patient_FirstName, Patient_LastName, First_Seen,  

SocialWorker_FirstName, SocialWorker_LastName] 

**Visit_Time** [Visit_Date(PK), Visit_Time(PK), Visit_Reason, New_Symptm, LevelofPain, 

Patient#(FK)]

3NF表

Same as 2NF

1 个答案:

答案 0 :(得分:1)

您的规范化大多是正确的。我看到的唯一区别是你没有在Patient#的PK中包含Visit_Time。在您的1NF中,不同的患者可以同时访问,但不能在您的2NF中访问。你的2NF并不是无效的,但规范化并没有改变关系的含义。

关于术语的说明:您的1NF具有由3个属性组成的单个复合主键。它不是3个单独的键。除了一个表只能有一个主键(这就是它被称为主键的原因)之外,一个键中的每个条目都必须是唯一的。在复合键中,每个条目都是属性值的唯一组合。单独的密钥意味着3个属性中的每个属性都是独一无二的,这样可以防止患者多次访问(或者每天或每天访问的患者不止一个)。