介绍
想象一下,将一个混乱的车库转变为一个井井有条的,光明的空间,在那里一切都很容易访问且整齐地布置。在数据库的世界中,此过程称为归一化。就像整洁的车库提高效率一样,结构良好的数据库具有有组织的数据。准备了解更多吗?本文探讨了前三种正常形式 - 1NF,2NF和3NF - 具有实际的SQL示例。无论您的数据库设计经验如何,您都将学习如何构建更高效,更可扩展的数据库。准备优化您的数据?让我们开始吧!
概述
- 使用SQL掌握数据库标准化的核心原理和目标。
- 应用第一种正常形式(1NF)来确保原子值和主键。
- 识别并消除部分依赖性以达到第二个正常形式(2NF)。
- 删除转移依赖性以满足第三正常形式(3NF)的要求。
- 使用实用的SQL查询实现归一化的数据库结构。
目录
- 介绍
- 什么是归一化?
- 第一种正常形式(1NF)
- 第二个正常形式(2NF)
- 第三正常形式(3NF)
- 实践例子:将所有这些结合在一起
- 结论
- 常见问题
什么是归一化?
归一化是关系数据库设计的关键方面。它通过最大程度地减少冗余并增强数据完整性来简化数据组织。此过程涉及将数据库分为多个表,并根据已建立的规则定义它们之间的关系,从而减少数据异常。让我们详细检查每种正常形式,概述原理并使用实用的SQL示例来说明它们。
第一种正常形式(1NF)
目的:确保每个表都有一个主键,每个列都包含原子(不可分割的)值。如果表遵守这些规则,则表可以满足1NF:
- 原子值:每一列应仅容纳一个值。
- 唯一的列名:每列必须具有唯一的标识符。
- 独立性的顺序:数据存储的顺序无关紧要。
例子:
考虑一个不高应的表,重复组:
Orderid | 自定义名称 | 产品 | 数量 |
---|---|---|---|
1 | 约翰·多伊 | 笔,铅笔 | 2,3 |
2 | 简·史密斯 | 笔记本,橡皮擦 | 1,2 |
该表违反了1NF,因为Products
和Quantities
列包含多个值。
转换为1NF:
Orderid | 自定义名称 | 产品 | 数量 |
---|---|---|---|
1 | 约翰·多伊 | 笔 | 2 |
1 | 约翰·多伊 | 铅笔 | 3 |
2 | 简·史密斯 | 笔记本 | 1 |
2 | 简·史密斯 | 橡皮 | 2 |
SQL实施:
创建表订单( Orderid int, Customername varchar(255), 产品Varchar(255), 数量int, 主键(有序,产品) );
第二个正常形式(2NF)
目的:确保表格为1NF,并且所有非键属性都完全取决于整个主键。这与具有复合主键的表特别相关。
实现2NF的步骤:
- 1NF合规性:表必须已经符合1NF。
- 消除部分依赖性:确保非键属性取决于完整的主键,而不仅仅是其中一部分。
例子:
考虑1NF中的表格,但表现出部分依赖性:
Orderid | 客户ID | productid | 数量 | 自定义名称 |
---|---|---|---|---|
1 | 1 | 1 | 2 | 约翰·多伊 |
2 | 2 | 2 | 1 | 简·史密斯 |
在这里, CustomerName
仅取决于CustomerID
,而不是复合密钥( OrderID
, ProductID
)。
转换为2NF:
- 为
Orders
和Customers
创建单独的表:
订单表:
Orderid | 客户ID | productid | 数量 |
---|---|---|---|
1 | 1 | 1 | 2 |
2 | 2 | 2 | 1 |
客户表:
客户ID | 自定义名称 |
---|---|
1 | 约翰·多伊 |
2 | 简·史密斯 |
SQL实施:
创建表订单( Orderid int, customerid int, productid int, 数量int, 主钥匙(OrderID,productid) ); 创建表客户( customerId int primary, customername varchar(255) );
第三正常形式(3NF)
目的:确保表格为2NF,所有属性仅取决于主要键。
实现3NF的步骤:
- 2NF合规性:表必须已经满足2NF要求。
- 删除传递依赖性:确保非键属性不取决于其他非键属性。
例子:
考虑2NF中的表格,但具有传递依赖性:
Orderid | 客户ID | productid | 数量 | 产品名称 |
---|---|---|---|---|
1 | 1 | 1 | 2 | 笔 |
2 | 2 | 2 | 1 | 笔记本 |
在这里, ProductName
取决于ProductID
,而不是直接取决于OrderID
。
转换为3NF:
- 为
Orders
和Products
创建单独的表:
订单表:
Orderid | 客户ID | productid | 数量 |
---|---|---|---|
1 | 1 | 1 | 2 |
2 | 2 | 2 | 1 |
产品表:
productid | 产品名称 |
---|---|
1 | 笔 |
2 | 笔记本 |
SQL实施:
创建表订单( Orderid int, customerid int, productid int, 数量int, 主钥匙(OrderID,productid) ); 创建表客户( customerId int primary, customername varchar(255) ); 创建表产品( productid int主键, ProductName Varchar(255) );
实践例子:将所有这些结合在一起
让我们从这个不正当的数据开始:
Orderid | 自定义名称 | 产品 | 数量 |
---|---|---|---|
1 | 约翰·多伊 | 笔,铅笔 | 2,3 |
2 | 简·史密斯 | 笔记本,橡皮擦 | 1,2 |
步骤1:转换为1NF
将多值列单独到原子值:
Orderid | 自定义名称 | 产品 | 数量 |
---|---|---|---|
1 | 约翰·多伊 | 笔 | 2 |
1 | 约翰·多伊 | 铅笔 | 3 |
2 | 简·史密斯 | 笔记本 | 1 |
2 | 简·史密斯 | 橡皮 | 2 |
步骤2:转换为2NF
识别和分开部分依赖性:
- 订单表:
Orderid | 客户ID | productid | 数量 |
---|---|---|---|
1 | 1 | 1 | 2 |
1 | 1 | 2 | 3 |
2 | 2 | 3 | 1 |
2 | 2 | 4 | 2 |
- 客户表:
客户ID | 自定义名称 |
---|---|
1 | 约翰·多伊 |
2 | 简·史密斯 |
- 产品表:
productid | 产品名称 |
---|---|
1 | 笔 |
2 | 铅笔 |
3 | 笔记本 |
4 | 橡皮 |
步骤3:转换为3NF
消除转移依赖性,确保直接依赖对主要密钥:
- 步骤2的表已经满足3NF,因为所有非键属性仅取决于主键。
结论
本文演示了如何实施SQL标准化。掌握SQL归一化对于构建强大而有效的数据库至关重要。通过了解和应用前三种正常形式(1NF,2NF和3NF)的原理,您可以显着降低冗余并增强数据完整性。这不仅简化了数据管理,还可以改善整体数据库性能。通过这些实用的SQL示例,您可以将复杂的,混乱的数据集转换为有效,结构良好的数据库。实施这些技术,以确保您的数据库稳定,可扩展且易于维护。
常见问题
Q1。什么是数据库归一化?
答:数据库归一化是根据一系列所谓的正常形式构建关系数据库的过程,以减少数据冗余并提高数据完整性。
Q2。为什么归一化重要?
答:标准化可最大程度地减少数据的重复,确保数据一致性并简化数据库维护。
Q3。什么是正常形式?
A.正常形式在归一化过程中表示阶段:1NF(第一种正常形式),2NF(第二个正常形式)和3NF(第三个正常形式)等。
以上是如何使用SQL实施归一化?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文探讨了“人工智能代理机构衰败”日益增长的关注 - 我们独立思考和决定的能力逐渐下降。 这对于越来越自动化世界的业务领袖尤其至关重要

有没有想过像Siri和Alexa这样的AI代理商是如何工作的?这些智能系统在我们的日常生活中变得越来越重要。本文介绍了反应模式,这种方法通过结合推理来增强AI代理

芝加哥大学校长Paul Alivisatos在一月份达沃斯论坛上接受德勤Nitin Mittal采访时表示:“我认为人工智能工具正在改变大学生的学习机会。我们坚信以核心课程培养学生,但越来越多的人也希望获得计算和统计思维的视角。” 他认为,人们将不得不成为人工智能的创造者和共同创造者,这意味着学习和其他方面都需要适应一些重大变化。 数字智能与批判性思维 乔治·华盛顿大学的Alexa Joubin教授在Phys.org发表的一篇文章中,将人工智能描述为人文科学的“启发式工具”,并探讨了它如何改变

Langchain是用于构建复杂AI应用程序的强大工具包。 它的代理体系结构特别值得注意,使开发人员能够创建能够独立推理,决策和行动的智能系统。这个咨询

径向基函数神经网络(RBFNNS):综合指南 径向基函数神经网络(RBFNN)是利用径向基础功能激活的强大类型的神经网络体系结构。 它们独特的结构使

脑部计算机界面(BCIS)将大脑直接连接到外部设备,将大脑冲动转化为没有身体运动的动作。 该技术利用植入传感器捕获大脑信号,将其转换为数字订票

这一“带有数据的领先”情节以Ines Montani,爆炸AI的联合创始人兼首席执行官Ines Montani,以及Spacy and Prodigy的共同开发者。 INE提供了有关这些工具发展的专家见解,爆炸的独特商业模式以及TR

本文探讨了检索增强发电(RAG)系统以及AI代理如何增强其功能。 传统的抹布系统虽然可用于利用自定义企业数据,但仍受诸如缺乏实时dat之类的限制


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

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

WebStorm Mac版
好用的JavaScript开发工具

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

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

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中