从0开始学习mysql 第十四课:数据库设计与三范式

这篇具有很好参考价值的文章主要介绍了从0开始学习mysql 第十四课:数据库设计与三范式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第十四课:数据库设计与三范式

学习目标

在本课中,你将学习关系数据库设计的三个基本范式,它们是用来规范数据库结构,减少数据冗余和改善数据完整性的准则。你将学习:

  • 第一范式(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操作。

课后练习
  1. 识别和改正非1NF表:给定一个包含重复行和列的表,将其转换为1NF。
  2. 从1NF到2NF的转换:给定一个1NF表,识别并消除部分依赖,将表升级到2NF。
  3. 从2NF到3NF的转换:给定一个2NF表,识别并消除传递依赖,将表升级到3NF。
  4. 范式化与性能分析:对一个已经范式化的数据库进行性能分析,比较JOIN操作前后的查询效率。

解析:

  1. 识别和改正非1NF表
    原始表可能包含类似以下结构的数据:
CREATE TABLE Sports (
  PlayerID int,
  PlayedSports varchar(255)
);

要将此表转换为1NF,需要确保PlayedSports列不包含多个值:

CREATE TABLE Sports (
  PlayerID int,
  PlayedSport varchar(255)
);
  1. 从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
);
  1. 从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)
);
  1. 范式化与性能分析
    分析可能涉及执行SQL查询并使用EXPLAIN语句来查看查询计划,比较不同设计下的查询复杂性和响应时间。

通过这些练习,你将能够实际操作和理解范式化在数据库设计中的应用及其对性能的影响。

第十五课:数据库事务文章来源地址https://www.toymoban.com/news/detail-818954.html

到了这里,关于从0开始学习mysql 第十四课:数据库设计与三范式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十四课:eNSP AAA配置教程

             AAA是Authentication(认证)、Authorization(授权)和Accounting(计费)的简称,是一种管理框架,它提供了授权部分用户访问指定资源和记录这些用户操作行为的安全机制。因其具有良好的可扩展性,并且容易实现用户信息的集中管理而被广泛使用。AAA可以通过多种协

    2024年01月25日
    浏览(43)
  • 网络通信原理系统的认知(NEBASE第十四课)

    物理层:建立、维护、断开物理连接,定义了接口及介质,实现了比特流的传输。   1.1传输层介质分类 有线介质:网线 (双绞线)光纤 无线: 无线电 1.2 双绞线 五类线 cat5 :适用 100Mbps 超五类线 cat5e : 适用于 100Mbps 六类cat6e :适用 于 1000Mbps 七类 cat7 适用 1000

    2024年02月16日
    浏览(39)
  • 【MySQL数据库 | 第十五篇】事务

        目录    前言:  介绍事务:  控制事务:  事务四大特性:  并发事务问题:  事务隔离级别: 总结:   这章我们将进入到MySQL基础篇的最后一章:事务,希望大家可以坚持下去,跟着我一起走完MySQL的学习之旅。 MySQL是一种关系型数据库管理系统,支持事务管理。 事

    2024年02月08日
    浏览(56)
  • 【MySQL数据库 | 第十二篇】:约束

    在MySQL中, 约束是一种限制数据表中列值的规定 。保证数据库中的数据正确,有效性和完整性。MySQL中的约束有以下几种: 1. 主键约束(Primary Key Constraint) :主键是用于唯一标识表中每行记录的列。主键约束要求 每个主键列的值都是唯一的,且不能为NULL 。一个表只能有一

    2024年02月08日
    浏览(49)
  • 【STM32】基础知识 第十四课 串口通信: 深入探究与应用

    在嵌入式系统中, 串口通信是一种常见的通信方式, 特别是在单片机领域. STM32 系列单片机提供了强大的串口 (UART) 功能, 可支持多种通信模式. 今天小白将带领大家深入探讨 STM32 的串口通信, 包括其基本原理, 配置方法, 中断处理及实际应用示例. 串口通信 (Serial Communication) 是一

    2024年02月15日
    浏览(43)
  • 【MySQL数据库 | 第十六篇】存储引擎

    目录  前言:  MySQL体系结构图: 存储引擎简介: 1. InnoDB存储引擎: 2. MyISAM存储引擎: 3. MEMORY存储引擎: 4. NDB Cluster存储引擎: 5. ARCHIVE存储引擎: 存储引擎语法: ACID与行级锁:  总结: 经过前面15篇的学习,我们已经学完了SQL的基本语法内容,大致掌握了数据库的操作

    2024年02月08日
    浏览(53)
  • MySQL数据库------------数据库的安装-----开始步入梦想

     欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————————— 这一篇文章主要讲解一下MySQL的下载 这是 CentOS7 的 mysql 安装,如果有其他版本的需求,可以自行百度去找安装教程。以下操作全部 在终

    2024年02月12日
    浏览(51)
  • 【MySQL数据库 | 第十三篇】多表查询

    多表查询是指在一个SQL语句中使用多个表进行数据查询和操作。多表查询可以对数据表之间的关系进行查询,例如可以通过连接多个表来获取更完整的数据信息。关于单表查询我们也介绍过,已经整理成文章发布:【MySQL数据库 | 第九篇】DQL操作_我是一盘牛肉的博客-CSDN博客

    2024年02月08日
    浏览(56)
  • C语言第十四课-------结构体的认识和使用-------重要一笔

    🎂        ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂    🎂      作者介绍:                              🎂🎂        🎂 🎉🎉🎉🎉🎉🎉🎉              🎂           🎂作者id:老秦包你会,         🎂 简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

    2024年02月14日
    浏览(44)
  • 完全从零Java自学系列【入门篇】(第四课:Mysql服务端安装&使用客户端操作数据库&初识SQL基础操作&Java中使用第三方包&Java数据库操作&初步理解面相对象真正的意义之桥接设计模式)

      数据库是专门用来存储一系列集合数据的地方。所有的文件都可以被称之为库,当应用场景没那么复杂的时候,简单的应用程序用文本就可以了。数据库的意义是为了设计更好的保障数据安全(如多线程操作)、数据一致、索引(如何在庞大的数据中快速查找)等等一系

    2024年02月21日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包