企业网站下载,网站的建设要多少钱,消除wordpress,代做财务报表分析网站第十四课#xff1a;数据库设计与三范式
学习目标
在本课中#xff0c;你将学习关系数据库设计的三个基本范式#xff0c;它们是用来规范数据库结构#xff0c;减少数据冗余和改善数据完整性的准则。你将学习#xff1a;
第一范式#xff08;1NF#xff09;的概念和实…第十四课数据库设计与三范式
学习目标
在本课中你将学习关系数据库设计的三个基本范式它们是用来规范数据库结构减少数据冗余和改善数据完整性的准则。你将学习
第一范式1NF的概念和实现第二范式2NF的概念和实现第三范式3NF的概念和实现范式化对数据库性能的潜在影响通过实例理解如何将这些范式应用到数据库设计中
学习内容
1. 第一范式1NF
知识点 1NF 要求数据库表的每一列都是不可分割的基本数据项同时每一行都是唯一的。
代码示例
-- 不符合1NF的表结构
CREATE TABLE Orders (OrderID int,ProductIDs varchar(255)
);-- 符合1NF的表结构
CREATE TABLE Orders (OrderID int,ProductID int
);预计输出效果 在符合1NF的设计中我们需要为每个产品创建新的行而不是用逗号分隔的字符串来存储多个产品ID。
2. 第二范式2NF
知识点 2NF 在1NF的基础上要求非主键列必须完全依赖于主键。
代码示例
-- 不符合2NF的表结构
CREATE TABLE OrderDetails (OrderID int,ProductID int,ProductName varchar(255),OrderDate datetime
);-- 符合2NF的表结构
CREATE TABLE Orders (OrderID int,OrderDate datetime
);CREATE TABLE Products (ProductID int,ProductName varchar(255)
);预计输出效果 进行2NF范式化之后我们将订单数据和产品数据分离到两个表中每个表都有其自己的主键。
3. 第三范式3NF
知识点 3NF要求数据表中的每一列都只依赖于主键不能存在传递依赖。
代码示例
-- 不符合3NF的表结构
CREATE TABLE Orders (OrderID int,CustomerID int,CustomerName varchar(255),CustomerAddress varchar(255)
);-- 符合3NF的表结构
CREATE TABLE Orders (OrderID int,CustomerID int
);CREATE TABLE Customers (CustomerID int,CustomerName varchar(255),CustomerAddress varchar(255)
);预计输出效果 在3NF的设计中订单和客户信息被分离。每个订单引用一个客户ID而客户的具体信息存储在另一个表中。
范式化对数据库性能的潜在影响
知识点 范式化可以减少数据冗余和提高数据一致性但有时也会导致查询性能下降因为可能需要多个表的JOIN操作。
课后练习
识别和改正非1NF表给定一个包含重复行和列的表将其转换为1NF。从1NF到2NF的转换给定一个1NF表识别并消除部分依赖将表升级到2NF。从2NF到3NF的转换给定一个2NF表识别并消除传递依赖将表升级到3NF。范式化与性能分析对一个已经范式化的数据库进行性能分析比较JOIN操作前后的查询效率。
解析
识别和改正非1NF表 原始表可能包含类似以下结构的数据
CREATE TABLE Sports (PlayerID int,PlayedSports varchar(255)
);要将此表转换为1NF需要确保PlayedSports列不包含多个值
CREATE TABLE Sports (PlayerID int,PlayedSport varchar(255)
);从1NF到2NF的转换 在1NF表中如果存在一个复合主键并且某些列只依赖于复合主键的一部分就需要将这些列移动到新表中
-- 原始1NF表
CREATE TABLE ClassAssignments (TeacherID int,ClassID int,AssignmentDate date,AssignmentName varchar(255)
);-- 转换为2NF
CREATE TABLE Teachers (TeacherID int,AssignmentName varchar(255)
);CREATE TABLE Classes (ClassID int,TeacherID int,AssignmentDate date
);从2NF到3NF的转换 在2NF表中如果存在非主键列之间的依赖需要创建新表来消除这种依赖
-- 原始2NF表
CREATE TABLE Employees (EmployeeID int,ManagerID int,ManagerName varchar(255)
);-- 转换为3NF
CREATE TABLE Employees (EmployeeID int,ManagerID int
);CREATE TABLE Managers (ManagerID int,ManagerName varchar(255)
);范式化与性能分析 分析可能涉及执行SQL查询并使用EXPLAIN语句来查看查询计划比较不同设计下的查询复杂性和响应时间。
通过这些练习你将能够实际操作和理解范式化在数据库设计中的应用及其对性能的影响。
第十五课数据库事务