MYSQL中的规范化

问题描述 投票:37回答:6

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

提前致谢。

mysql database-normalization
6个回答
79
投票

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

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

因此,简而言之,规范化是避免使字段为空,并确保表中的所有字段仅属于所描述的数据的一个域。例如,在employee表中,字段可以是id,name,社会安全号,但这三个字段与部门无关。只有员工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 )

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

希望这可以帮助。


14
投票

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

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

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

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

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

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

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

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

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

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

塞尔也

Database Normalization Basics


3
投票

这是一种通过消除重复来确保数据保持一致的技术。因此,相同信息存储在多个表中的数据库未进行规范化。

请参阅有关Database normalization的维基百科文章。

(这是关系数据库的一般技术,不是MySQL特有的。)


2
投票

在为应用程序创建数据库模式时,需要确保避免在不同表中存储在多个列中的任何信息。

由于数据库中的每个表都标识了应用程序中的重要实体,因此唯一标识符是必需的列。

现在,在决定存储架构时,正在识别这些实体(表)之间的各种关系,即一对一,一对多,多对多。

  1. 对于一对一的关系(例如,学生在班级中具有唯一的等级),可以使用相同的表来存储列(来自两个表)。
  2. 对于一对多关系(例如,一个学期可以有多个课程),正在父表中创建外键。
  3. 对于多对多关系(例如A教授参加许多学生,反之亦然),需要创建第三个表(两个表中的主键作为复合键),以及两者的相关数据表格将被存储。

一旦您处理了所有这些场景,您的db-schema将标准化为4NF。


2
投票

检查this帖子有用的建议

Barry关于理解数据库模式的教程

http://www.youtube.com/watch?v=KqvIGYjcLQ4 

0
投票

在关系数据库设计领域,规范化是一种系统方法,可确保数据库结构适用于通用查询,并且不存在某些不良特征 - 插入,更新和删除异常 - 这可能导致数据完整性丢失[1]。关系模型的发明者E.F. Codd介绍了规范化的概念以及我们现在所知道的1970年的第一个正规形式。[2] Codd继续在1971年定义第二和第三范式,[3] Codd和Raymond F. Boyce在1974年定义了Boyce-Codd范式。[4]其他理论家在随后的几年中定义了更高的正常形式,最近的是由Chris Date,Hugh Darwen和Nikos Lorentzos在2002年引入的第六种正常形式。[5]

非正式地,关系数据库表(关系的计算机化表示)通常被描述为“标准化”,如果它处于第三范式(3NF)。[6]大多数3NF表没有插入,更新和删除异常,即在大多数情况下,3NF表遵循BCNF,4NF和5NF(但通常不是6NF)。

标准的数据库设计指导是设计师应该创建一个完全标准化的设计;随后可以出于性能原因执行选择性非规范化。[7]然而,一些建模学科,例如数据仓库设计的维度建模方法,明确推荐非标准化设计,即在很大程度上不遵守3NF的设计。[8]

编辑:来源:http://en.wikipedia.org/wiki/Database_normalization

© www.soinside.com 2019 - 2024. All rights reserved.