database - 如何规范化数据库中的数据?

标签 database

我正在学习数据库管理入门类(class),我们正在学习规范化数据(1NF、2NF、3NF 等),但我对如何真正着手去做感到非常困惑。我已经阅读了这篇文章,查阅了各种网站和 youtube 视频,但我似乎仍然无法点击它。如果有任何帮助,我正在使用 Microsoft Access 2013。

https://i.imgur.com/vZ3QNjr.jpg

这是我正在处理的数据。

谢谢。

Edit1: 好的,我想我已经正确设置了表格。但是现在我在实际输入数据以从一张表转到下一张表时遇到了麻烦。这是我的关系表。

enter image description here

最佳答案

在非常基本的层面上,表中的任何重复值都是规范化的候选值。重复的数据通常不是一个好主意。假设您需要更新患者的姓氏 - 您现在必须更新此表中出现的所有事件,并且可能更新数据库其余部分中的许多其他事件。最好将每位患者的详细信息仅存储在一个地方。

这就是归一化的用武之地。向下看列,您可以看到有关牙医、患者和手术的数据有重复值,因此我们应该归一化,为每个实体以及原始数据创建表格包含约会的表,总共有四个表。

将实体提取到它们自己的表中,并为每一行提供一个主(唯一)键 - 现在只需使用一个递增的整数。 (编辑:正如评论中所建议的,我们可以使用 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/

相关文章:

android - Eclipse LogCat 错误 : android. database.sqlite.SQLiteException:没有这样的表:

python-3.x - 连接 Cassandra 和 Python 的有效方法(抑制警告)

php - MYSQL 错误 - 由于目标机器拒绝而无法建立连接

php - 使用来自动态生成的文本框列表的数据更新 mysql 数据库的正确方法是什么?

mysql - 无法创建 MySQL/MariaDB 存储过程

sql - 对另一个数据库的 View

java - 对对象集合进行排序的有效方法

database - 如何使用 Django 中的 South 将数据从一个模型迁移到另一个模型?

python - 同步本地和远程数据库

java - 如何在 Logcat 中显示 SQLite 表