一尘不染

MYSQL中的规范化

mysql

任何人都可以帮助我了解什么是mysql中的规范化,在这种情况下以及我们需要如何使用它。

提前致谢。


阅读 362

收藏
2020-05-17

共1个答案

一尘不染

我试图在这里尝试用外行术语解释标准化。首先,它适用于关系数据库(Oracle,Access,MySQL),因此不仅适用于MySQL。

规范化是要确保每个表都只有最小的字段并摆脱依赖关系。假设您有一个员工记录,而每个员工都属于一个部门。如果将部门与员工的其他数据一起存储为字段,则会遇到问题-
如果删除部门,会发生什么?您必须更新所有部门字段,并且有机会出错。如果某些员工没有部门(也许是新分配的)怎么办?现在将有空值。

因此,简而言之,标准化是要避免字段为空,并确保表中的所有字段仅属于所描述数据的一个域。例如,在雇员表中,这些字段可以是ID,姓名,社会保险号,但是这三个字段与部门无关。仅员工ID描述该员工所属的部门。因此,这意味着员工所在的部门应该在另一个表中。

这是一个简单的规范化过程。

EMPLOYEE ( < employee_id >, name, social_security, department_name)

如所解释的,这没有被标准化。规范化的形式可能看起来像

EMPLOYEE ( < employee_id >, name, social_security)

在这里,Employee表仅负责一组数据。那么,我们在哪里存储员工所属的部门?在另一张桌子

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

这不是最佳的。如果部门名称更改怎么办?(美国政府一直在发生这种情况)。因此最好这样做

EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )

有第一范式,第二范式和第三范式。但是,除非您正在学习数据库课程,否则我通常只会采用我能理解的最规范的形式。

希望这可以帮助。

2020-05-17