Database design 数据库规范化
我有一张桌子。我如何将其正常化Database design 数据库规范化,database-design,database-normalization,Database Design,Database Normalization,我有一张桌子。我如何将其正常化 在我们开始之前,我会先提到每个步骤的规则。为什么会这样?因为我不知道你表中的依赖项。因此,提出规则和我对你的数据的假设将澄清我是如何得出最终解决方案的 最后,如果您对答案不满意,那么至少您将失去对规范化工作原理的理解,并且可以自己对只有您最了解的数据进行规范化 数据库设计的自然顺序 从指定实体开始(这些是表格) 指定实体所需的属性(这些是列) 指定实体(表的主键)的唯一属性。如果没有,请自己提供一个(也称为合成主键或代理主键) 最后指定这些实体之间的关系(主键
在我们开始之前,我会先提到每个步骤的规则。为什么会这样?因为我不知道你表中的依赖项。因此,提出规则和我对你的数据的假设将澄清我是如何得出最终解决方案的 最后,如果您对答案不满意,那么至少您将失去对规范化工作原理的理解,并且可以自己对只有您最了解的数据进行规范化
数据库设计的自然顺序
Table Name Columns
Employee Id, Name, RoleId, DeptId
Role RoleId, RoleType
Department DeptId, DeptName
Salary EmpId, DateOfChange, Amount
Emp_ID | Emp_Name | Salary | Emp_Type_Id | Emp_Skill
----------------------------------------------------
1 | raj | 90000 | 1 | Department
2 | ravi | 50000 | 2 | Software
3 | shyam | 70000 | 2 | Hardware
.
.
.
以上所有表格可以有更多项目。我想尝试一下与你已经给出的那张桌子有最小差异的设计。Like Salary表也可以有一个字段,如ReasonOfSalaryChange,它可以有值,如NewEmployment、Promotion等。。。但我们把变化控制在最低限度
希望到现在一切都好。如果是这样的话,我们继续进行您所要求的实际规范化
常用规范化 我之所以提到常用规则,是因为老实说,我在实践中从未需要BCNF、第四和第五NF 规则- 1NF:只是说明所有列都必须具有原子值。如果列需要多个值,请创建另一个表。你的新桌子通过了那个测试。表列中的所有值都是原子值 2NF:需要1NF限定,任何非关键字段都应依赖于整个主键。所有非键字段(员工中的姓名、角色中的角色类型、部门中的部门名称、薪资中的金额)都依赖于相应表的主键(Id、RoleId、DeptId和{EmpId、DateOfChange})。因此,表格符合2NF标准 3NF:需要2NF资格,非关键字段不应依赖于任何其他非关键字段。这意味着除了主键之外,表的列之间不应该有依赖关系。角色、部门和薪资表默认为3NF限定,因为它们只有一个非关键列,并且依赖于主键。Employee表(您可以自己验证)没有依赖于任何其他非关键元素的非关键元素。因此,这些表完全符合当前的3NF条件
现在只剩下指出RoleId、DeptId和EmpId分别是来自Role、Department和Employee表的外键。这将是我向您提交的最后一次重新设计和规范化的数据库。在我们开始之前,我将首先提到每个步骤的规则。为什么会这样?因为我不知道你表中的依赖项。因此,提出规则和我对你的数据的假设将澄清我是如何得出最终解决方案的 最后,如果您对答案不满意,那么至少您将失去对规范化工作原理的理解,并且可以自己对只有您最了解的数据进行规范化
数据库设计的自然顺序
Table Name Columns
Employee Id, Name, RoleId, DeptId
Role RoleId, RoleType
Department DeptId, DeptName
Salary EmpId, DateOfChange, Amount
Emp_ID | Emp_Name | Salary | Emp_Type_Id | Emp_Skill
----------------------------------------------------
1 | raj | 90000 | 1 | Department
2 | ravi | 50000 | 2 | Software
3 | shyam | 70000 | 2 | Hardware
.
.
.
上表中的所有内容都可以用h表示