我正在学习数据库管理入门类(class),我们正在学习规范化数据(1NF、2NF、3NF 等),但我对如何真正着手去做感到非常困惑。我已经阅读了这篇文章,查阅了各种网站和 youtube 视频,但我似乎仍然无法点击它。如果有任何帮助,我正在使用 Microsoft Access 2013。
这是我正在处理的数据。
谢谢。
Edit1: 好的,我想我已经正确设置了表格。但是现在我在实际输入数据以从一张表转到下一张表时遇到了麻烦。这是我的关系表。
最佳答案
在非常基本的层面上,表中的任何重复值都是规范化的候选值。重复的数据通常不是一个好主意。假设您需要更新患者的姓氏 - 您现在必须更新此表中出现的所有事件,并且可能更新数据库其余部分中的许多其他事件。最好将每位患者的详细信息仅存储在一个地方。
这就是归一化的用武之地。向下看列,您可以看到有关牙医、患者和手术的数据有重复值,因此我们应该归一化,为每个实体以及原始数据创建表格包含约会的表,总共有四个表。
将实体提取到它们自己的表中,并为每一行提供一个主(唯一)键 - 现在只需使用一个递增的整数。 (编辑:正如评论中所建议的,我们可以使用 PatientNo、StaffNo 和 SurgeryNo 的自然键而不是创建代理。)
然后,我们不再在预约表中多次出现每个患者的姓名和编号,而是在患者表中引用主记录的键。这称为外键。
然后,对 Dentist 和 Surgery 执行相同的操作。
您最终会得到如下所示的表格:
APPOINTMENT
AppointmentID DentistID PatientID AppointmentTime SurgeryID
----------------------------------------------------------------
1 1 1 12 Aug 03 10:00 1
2 1 2 ... 2
3 2 3 ... 1
4 2 3 ... 1
5 3 2 ... 2
6 3 4 ... 3
DENTIST
DentistID Name StaffNo
--------------------------------------
1 Tony Smith S1011
2 Helen Pearson S1024
3 Robin Plevin S1032
PATIENT
PatientID Name PatientNo
---------------------------------------
1 Gillian White P100
2 Jill Bell P105
3 Ian MackKay P108
4 John Walker P110
SURGERY
SurgeryID SurgeryNo
-------------------------
1 S10
2 S15
3 S13
关于database - 如何规范化数据库中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311148/