数据库规范化以结构化且一致的方式组织数据,消除冗余并确保关系数据库内的数据完整性。它使数据库更易于管理、查询和维护,减少错误。
通过遵循规范化规则,您可以设计更易于维护且不易出错的数据库。
在深入规范化之前,我们想了解关系数据库的基础知识。
- 关系数据库是一种将数据存储在表中的数据库,表的结构为行和列。 表格 - 相关数据条目的集合 行 - 记录,每一行代表一条数据 列 - 字段,每一列代表数据的一个特定属性。
主键 - 表中每一行的唯一标识符。确保每条记录都可以唯一标识。
外键 - 一个表中的字段链接到另一个表的主键,在两个表之间创建关系
我们提到标准化是为了消除冗余和不一致的依赖。那是什么?
冗余数据意味着将相同的数据存储在多个地方,这会浪费磁盘空间并造成维护问题。如果数据发生任何变化,我们必须在所有地方更新它。
不一致的依赖关系 当数据库中的数据以不可预测或不正确的方式依赖于其他数据时,就会发生。这可能会导致错误并使数据库不可靠。
- 规范形式 - 数据库规范化中的每条规则。如果数据库遵循规范化的第一条规则,则它处于“第一范式”(1NF)。如果它遵循前三个规则,则它处于“第三范式”(3NF)。
将范式视为流程中的检查点/规则,类似于驾驶考试的学习阶段、停车阶段和路考阶段。
第一范式 (1NF)
- 消除各个表中的重复组。
- 为每组相关数据创建一个单独的表。
为了标准化这些数据,我们为学生及其课程创建单独的表:
- 用主键标识每组相关数据。
第二范式 (2NF)
- 删除部分依赖 - 每个非键列必须依赖于整个主键,而不仅仅是它的一部分。
1NF仅消除重复组,而不是冗余。这就是为什么有2NF。
如果表满足以下条件,则称其为 2NF:
已经是 1NF
没有部分依赖。也就是说,所有非键属性完全依赖于主键。
第三范式(3NF)
通过确保非键属性仅依赖于主键来删除传递依赖关系。
现在我们需要理解传递依赖,这是理解3NF的关键。
当属性(列)依赖于另一个非键属性而不是直接依赖于主键时,就会发生传递依赖。
3NF 需要
- 桌子已经是 2 NF
- 没有传递依赖。这意味着非键 属性不应依赖于其他非关键属性。
这是 3NF 的最终结构:
没有部分依赖(因为所有属性都完全依赖于各自表中的整个主键)。
没有传递依赖(因为没有非键属性依赖于其他非键属性)。
基本键范式 (EKNF)
- EKNF 是 3NF 的更严格形式,可确保所有函数依赖关系都是基本的,这意味着它们简单明了,没有任何复杂的依赖关系。
3NF:确保没有传递依赖。
EKNF:通过确保所有函数依赖关系都是基本的来进一步完善 3NF,解决 3NF 可能无法处理的更复杂的依赖关系。
博伊斯-科德范式(BCNF)
-
如果满足以下条件,则表属于 BCNF:
- 它位于 3NF。
- 对于每个函数依赖( A —> B ),A 必须是候选键(超级键)。
超级键:一组一个或多个列,可以唯一标识表中的一行。
功能依赖:一个属性唯一确定另一个属性的关系。
第四范式(4NF)
BCNF 之后的下一级范式。
其他范式涉及函数依赖关系,4NF 涉及更通用的依赖类型,称为多值依赖关系。
多值依赖 - 当一个属性独立于其他属性确定另一个属性的多个值时发生。
第五范式(5NF)
也称为项目加入范式(PJNF),是标准化的最高级别。如果表已经处于 4NF 状态并且无法在不丢失数据完整性的情况下分解为更小的表,则该表处于 5NF 状态。这意味着表中的每个重要连接依赖项都由候选键隐含。
如果我们将这张表分解为更小的表以消除冗余,我们必须确保我们仍然可以重建原始表而不会丢失任何信息。在 5NF 中,这种分解是以不丢失任何信息的方式完成的,并且保留所有连接依赖性。举例说明
反规范化
表可以进行非规范化以提高性能。
标准化增加了表和关系的数量。
跨关系访问多个表比访问单个表需要更多处理。
以上是数据库规范化的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载
最流行的的开源编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具