我试图在 Oracle 数据库中学习规范化,但在理解规范化是解决方案的问题时感到震惊,即我无法正确理解不同的异常(插入、删除和更新)。不是这样,我对他们一无所知;我从教科书 (Navathe & Elmsari) 中学到了这个理论。异常是在这些过程中数据库中出现的问题并导致数据库不一致。但我无法正确地对其进行可视化,即异常如何在数据库中引入。因此,如果有人提出一个非常简单的数据库示例并帮助我了解如何在数据库中引入这些异常,那将非常有帮助。我试图在互联网上找到,但找不到好的例子。
1 回答
Anamoly : 难以分类
未规范化的数据库表中的数据冗余导致的问题统称为更新异常。因此,任何使数据库处于不一致状态的数据库插入、删除或修改都被称为导致更新异常。它们被归类为
插入异常: 要将位于分行 B1 的新员工的详细信息插入到上面显示的 Tbl_Staff_Branch 表中,我们必须输入正确的分行编号 B1 的详细信息,以便该分行详细信息与其他行中分行 B1 的值一致. 要将当前没有员工的新分支的详细信息插入到 Tbl_Staff_Branch 表中,必须为员工详细信息输入空值,因为 staffID 是主键,所以不允许输入空值。但是,如果将第二范式 (2NF) 中的 Tbl_Staff_Branch 标准化为第三范式宿舍 (3NF),您最终会得到 Tbl_Staff 和 Tbl_Branch,并且您不应该遇到上述问题。
删除异常: 如果我们从 Tbl_Staff_Branch 表中删除代表位于该分支机构的最后一名员工的行(例如,具有分支机构编号 B"、B3 或 B4 的行),则有关该分支机构的详细信息也会从数据库中丢失。
修改异常: 如果我们需要更改 Tbl_Staff_Branch 表中特定分支的地址,我们必须更新位于该分支的所有员工的行。如果没有对所有相关行进行此修改,数据库将变得不一致。
阅读更多: http: //www.mahipalreddy.com/dbdesign/dbqa.htm#update