信息发布→ 登录 注册 退出

一文了解MYSQL三大范式和表约束

发布时间:2026-01-11

点击量:
目录
  • 一,什么是范式
  • 二,三大范式的理解
    • 1,第一范式(确保每列保持原子性)
    • 2,第二范式(保证每列都和主键相关)
    • 3,第三范式(保证每列和主键直接相关,不能间接相关)
    • 4,表的关系
      • (1)一对一
      • (2)一对多
      • (3)多对多
  • 三,表的约束有哪些
    • 1,约束类型
      • 2,表的约束
      • 总结 

        一,什么是范式

        范式简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式

        范式一共有六种,这里主要详细介绍三大范式:
        第一范式(1NF),第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了

        二,三大范式的理解

        1,第一范式(确保每列保持原子性)

        首先第一范式是最基本的范式,而第一范式的合理遵循要按照系统的需求而定,第一范式也是为了确保每列保持原子性,如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第⼀范式。

        例如:某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成⼀个数据库表的字段

        2,第二范式(保证每列都和主键相关)

        第⼆范式在第⼀范式的基础之上更进⼀层。第⼆范式需要确保数据库表中的每⼀列都和主键相关,而不能只与主键的某⼀部分相关(主要针对联合主键)。也就是说在⼀个数据库表中,⼀个表中只能保存⼀种数据,不可以把多种数据
        保存在同⼀张数据库表中

        例如:对于一张订单表,应该只包括订单信息,若第一张有数量信息,不符合第二范式,对于订单数量应该单独为一张表

        3,第三范式(保证每列和主键直接相关,不能间接相关)

        第三范式需要确保数据表中的每⼀列数据都和主键直接相关,而不能间接相关,即满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。 解释就是一张表最多只存两层同类型信息

        例如:在设计⼀个订单数据表的时候,可以将客户编号作为⼀个外键和订单表建立相应的关系

        4,表的关系

        (1)一对一

        一对一就是⼀个学生对应⼀个学号

        (2)一对多

        一对多是 ⼀个班级包含多个学生(用两张表表示)

        (3)多对多

        ⼀张表中的⼀条数据可以对应到另⼀张表的多条数据

        三,表的约束有哪些

        1,约束类型

        表约束也是为了规范程序员正确使用表的,但表约束是预先设置的,设置之后就对所有插⼊和修改立即生效

        ⭐ NOT NULL - 指示某列不能存储 NULL 值。
        ⭐UNIQUE - 保证某列的每行必须有唯一的值。
        ⭐DEFAULT - 规定没有给列赋值时的默认值。
        ⭐PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
        ⭐FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
        ⭐CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句

        2,表的约束

        (1)非空约束:NOT NULL

        创建的字段默认是可以为空的

        而添加了非空约束之后,设置的字段就不能为空了。

        语法

        字段名 数据类型 NOT NULL
        说明了某列不可以存储空值

        (2)主键约束:PRIMARY KEY

        主键的特征:

        1.主键可以由多个字段或单个字段组成

        2. 主键不能为空且唯⼀

        3. ⼀个表中只能有⼀个主键

        独立主键语法:

        语法: 字段 字段类型 primary key
        示例:
        create table test4(id int primary key,name varchar(250));

        独立主键:该主键由一个字段组成,且该主键不能重复
        联合主键:多个字段组成的主键,因此字段不能重复
        一个主键可以有多个字段,一张表只能有一个主键

        联合主键语法:

        语法: primary key(字段1,字段2…)

         示例:
        > create table test5(
        id int,
        name varchar(250),
        primary key(id,name)
        );
        

        (3)唯一约束:UNIQUE

        唯⼀约束就是对应字段的值是唯⼀的,不能重复,但一个表可以有多个唯一索引

        语法:

        字段名 数据类型 unique
        示例:
        CREATE TABLE student_unique (
        id INT unique,
        name VARCHAR(250)
        );

        ⭐ 唯一约束和主键约束区别(面试常考)

        主键约束⼀个表只能有⼀个,⽽唯⼀约束可以有多个
        主键约束不能有 null 值,⽽唯⼀约束可以有 null(唯⼀索引可以有多个 null)

        (4)外键约束:FOREIGN KEY

        外键用于关联其他表的主键或唯⼀键

        外键可以插入NULL,多个NULL,若外键指定了值,那这个值一定要有效,有效是这个值在主表存在了

        语法:

        foreign key (字段名) references 主表(列)

        示例:

        创建学生表student,⼀个学生对应⼀个班级,⼀个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id

        -- 重新设置学⽣表结构
        DROP TABLE IF EXISTS student;
        CREATE TABLE student (
        id INT PRIMARY KEY auto_increment,
        sn INT UNIQUE,
        name VARCHAR(250) DEFAULT 'unkown',
        qq_mail VARCHAR(250),
        classes_id int,
        FOREIGN KEY (classes_id) REFERENCES classes(id)
        );
        

        (5)默认值约束: DEFAULT

        指定id列为主键

        -- 重新设置学生表结构
        DROP TABLE IF EXISTS student;
        CREATE TABLE student (
        id INT NOT NULL PRIMARY KEY,
        sn INT UNIQUE,
        name VARCHAR(20) DEFAULT 'unkown',
        qq_mail VARCHAR(20)
        );
        

        对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1

        – 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
        id INT PRIMARY KEY auto_increment

        总结 

        在线客服
        服务热线

        服务热线

        4008888355

        微信咨询
        二维码
        返回顶部
        ×二维码

        截屏,微信识别二维码

        打开微信

        微信号已复制,请打开微信添加咨询详情!