首页 > 数据库 >【MySQL】010-数据库设计的三大范式

【MySQL】010-数据库设计的三大范式

时间:2023-02-22 16:03:22浏览次数:54  
标签:范式 数据库 2NF 依赖于 010 1NF MySQL 三大 属性

一、范式概述

范式,数据库设计范式,数据库的设计范式,是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式;

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了;

一般只学习前面三大范式;

 

二、三大范式详解

1、第一范式(1NF)

内涵:

每一列都是不可分割的原子数据项;

百科:

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。

存在的问题:

①存在非常严重的数据冗余(重复);

②数据添加存在问题;

③数据删除存在问题;

 

2、第二范式

内涵:

在1NF的基础上,非码属性必须完全依赖于候选码(在1NF的基础上消除非主属性对主码的部分函数的依赖);

扩展概念:

①函数依赖:如果通过A属性(属性组)的值,可以确定B属性(属性组)的唯一值,则称B依赖于A;

例如:一个学生的姓名对应唯一的一个学号,那么学号依赖于学生的姓名;

②完全函数依赖:如果必须通过A属性组所有属性值,才能确定B属性(属性组)的唯一值,则称B完全依赖于A;

例如:一个学生的总成绩的确定,必须依赖所有成绩;

③部分函数依赖:如果需要通过A属性组一部分的属性值,来确定B属性(属性组)的唯一值,则称B部分依赖于A;

例如:要确定一个学生的姓名,只需要知道这个学生所在的学校以及他的学号;

④传递函数依赖:如果通过A属性(属性组)的值,可以确定B属性(属性组)唯一的值,再通过B属性(属性组)的值确定C属性(属性组)唯一的值,则称C传递依赖于A;

例如:通过学生(的学号)确定学院,通过学院确定学院院长,则院长传递依赖于学生;

⑤码:在一张表中,如果通过一个属性(属性组)可以确定其他所有的属性,则称这个属性(属性组)为该表的码;

例如:通过一个学生的所在学校和学号可以确定该学生的姓名、年龄、性别、各科成绩等信息,则学校和学号就是该表的码;

延伸:主属性:码属性组中的所有属性;非主属性:码属性组之外的属性;

百科:

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。

 

3、第三范式

内涵:

在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF的基础上消除传递依赖);

百科:

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

 

 

 

 

标签:范式,数据库,2NF,依赖于,010,1NF,MySQL,三大,属性
From: https://blog.51cto.com/u_13272819/6079192

相关文章

  • 【MySQL】013-用户管理和权限管理(了解)
    一、用户管理1、添加用户CREATEUSER'用户名'@'主机名'IDENTIFIEDBY'密码'; 2、删除用户DROPUSER'用户名'@'主机名'; 3、修改用户......
  • 【MySQL】005-表的CRUD(增删改查)操作
    目录1、查询数据库中所有的表名称:二、创建1、语法格式2、MySQL中的数据类型(常用的)整型:int浮点型:double(参数1,参数2)日期(仅年月日):date日期:datetime时间戳:timest......
  • 【MySQL】006-记录的增删改操作
    一、添加数据1、语法格式:insertinto表名(列名1,列名2,列名3,...,列名n)values(值1,值2,值3,...,值n);2、注意:①列名和值要一一对应;②如果......
  • 【MySQL】007-记录的查询
    一、基础查询1、多个字段的查询select字段1,字段2...字段nfrom表名;--如果要查询所有字段,可以用*代替 2、去除重复selectdistinct字......
  • E010Web学习笔记-Tomcat
    一、web相关概念回顾1、软件架构C/S架构:客户端/服务器端;B/S架构:浏览器/服务端;浏览器内含静态资源解析引擎;浏览器请求数据,服务器响应来自浏览器的请求; 2、资源......
  • sqlserver、mysql、sqlite json类型数据查询及索引优化
     sqlserver:#querySELECTSalesOrderNumber,OrderDate,JSON_VALUE(Info,'$.Customer.Name')ASCustomerNameFROMSales.SalesOrderHeaderWHEREJSON_VA......
  • MySql导出表结构并排序
    SELECTcolumn_nameas字段名称,column_typeas字段类型,column_commentas字段描述FROMinformation_schema.COLUMNSWHEREtable_schema=......
  • mysql 数据库 序列号 自增长
    在同一个节点任何一个数据库上新建MYCAT_SEQUENCE表CREATETABLEMYCAT_SEQUENCE(nameVARCHAR(50)NOTNULLCOMMENT'sequence名称',current_valueINTNOTNULLCO......
  • Python UI自动化三大等待方式区别
    PythonUI自动化三大等待方式sleep():强制等待,设置固定休眠时间。后脚本的执行过程中执行sleep()后线程休眠,而另外两种线程不休眠。implicitly_wait():隐式等待,是设置的......
  • 调查报告解读之国外数据库篇:MySQL国内使用率第一,多少企业有意替换国外产品?
    为了解数据库行业以及从业人员的现状、数据库选型、中国数据库的发展趋势等,墨天轮于2022年开始进行问卷收集,历时24天,共征集到有效问卷3476份,并于2月10日整理发布了《2022年......