mysql - 我是否正确规范了这张表?

标签 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

最佳答案

您的规范化大部分是正确的。我看到的唯一区别是您没有在 Visit_Time 的 PK 中包含 Patient#。在您的 1NF 中,不同的患者可以同时就诊,但在您的 2NF 中则不行。您的 2NF 就目前而言并非无效,但规范化不会改变关系的含义。

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

关于mysql - 我是否正确规范了这张表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33194115/

相关文章:

mysql - 错误 : Error 1215: Cannot add foreign key constraint (have tried everything)

sql - 如何使用 PostgreSQL 执行 vacuum?

mysql - 优化超过 200,000 条记录的查询

mysql - 将 ADO 记录集作为可见表打开

sql - mysql语句无法更新添加4年

php - MYSQL 创建动态查询(数据透视)

mysql - 在 SQL 连接语句中添加 case 语句

mysql - 如果 MySQL 中的某行大于另一个值,则将其添加到该行

mysql - ID 引用表而不是表中的列

mysql - 准备百万行数据进行可视化