MYSQL中的规范化

Fer*_*ero 37 mysql database-normalization

任何人都可以帮助我知道mysql中的规范化是什么,在哪种情况下以及我们如何使用它...

提前致谢.

Ext*_*kun 79

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

规范化是为了确保每个表都有唯一的最小字段并摆脱依赖关系.想象一下,你有一份员工记录,每个员工都属于一个部门.如果将部门存储为字段以及员工的其他数据,则会出现问题 - 如果部门被删除会发生什么?您必须更新所有部门字段,并且有错误的机会.如果一些员工没有部门(可能是新任命的),该怎么办?现在将有空值.

因此,简而言之,规范化是避免使字段为空,并确保表中的所有字段仅属于所描述的数据的一个域.例如,在employee表中,字段可以是id,name,社会安全号,但这三个字段与部门无关.只有员工ID描述员工所属的部门.因此,这意味着员工所在的部门应该在另一个表中.

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

EMPLOYEE ( < employee_id >, name, social_security, department_name)
Run Code Online (Sandbox Code Playgroud)

正如所解释的那样,这没有标准化.标准化形式可能看起来像

EMPLOYEE ( < employee_id >, name, social_security)
Run Code Online (Sandbox Code Playgroud)

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

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )
Run Code Online (Sandbox Code Playgroud)

这不是最佳选择.如果部门名称发生变化怎么办?(它一直发生在美国政府).因此,最好这样做

EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )
Run Code Online (Sandbox Code Playgroud)

有第一范式,第二范式和第三范式.但除非你正在学习数学课程,否则我通常会选择我能理解的最规范的形式.

希望这可以帮助.


rah*_*hul 14

规范化不仅适用于MYSql.它是一般的数据库概念.

规范化是在数据库中有效组织数据的过程.规范化过程有两个目标:消除冗余数据(例如,将相同数据存储在多个表中)并确保数据依赖性有意义(仅将相关数据存储在表中).这两个都是有价值的目标,因为它们减少了数据库消耗的空间量并确保数据以逻辑方式存储.

SQL中的普通表单如下所示.

第一范式(1NF):如果一个关系只有单值属性,则该关系称为1NF,不允许重复也不允许数组.

第二范式(2NF):如果一个关系在1NF中并且每个非关键属性完全依赖于主键,则该关系被称为2NF.

第三范式(3NF):如果关系是2NF并且没有传递依赖关系,我们说关系是3NF.

Boyce-Codd Normal Form(BCNF):当且仅当关系中的每个行列式都是候选键时,才称该关系在BCNF中.

第四范式(4NF):如果它在BCNF中并且不包含多值依赖关系,则称该关系在4NF中.

第五范式(5NF):当且仅当关系的候选键隐含关系中的每个连接依赖时,才称该关系在5NF中.

域密钥正规形式(DKNF):如果没有所有修改异常,我们说关系在DKNF中.插入,删除和更新异常都会受到修改异常的影响

塞尔也

数据库规范化基础

  • 我觉得你错了4NF.难道不应该是"没有多重依赖"吗?1NF已禁止多值属性! (4认同)
  • 编辑.@Thomas Padron-McCarthy,谢谢你指出 (2认同)