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中.插入,删除和更新异常都会受到修改异常的影响
塞尔也
归档时间: |
|
查看次数: |
50229 次 |
最近记录: |