MySQL的多表间关系

2022-11-30  本文已影响0人  程序员丶星霖

一、数据库三范式

1.1 第一范式:确保每列保持原子性

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

如果不遵守第一范式,查询出数据还需要进一步处理(查询不方便)。遵守第一范式,需要什么字段的数据就查询什么数据(方便查询)。

1.2 第二范式:确保表中的每列都和主键相关

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关。

也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存到同一张数据库表中。

1.3 第三范式:确保每列都和主键列直接相关,而不是间接相关

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

二、外键约束

2.1 外键约束的概念

在遵循三范式的前提下,很多时候需要进行拆表,将数据分别存放多张表中,以减少冗余数据。但是拆分出来的表与表之间是有着关联关系的,必须得通过一种约束来约定表与表之间的关系,这种约束就是外键约束。

2.2 外键约束的作用

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个表的字段之间的参照关系。

2.3 创建外键约束的语法

2.3.1 在建表时指定外键约束

-- 外键
-- 1. 创建部门表
CREATE TABLE dept(
    id INT PRIMARY KEY AUTO_INCREMENT,
    dept_name VARCHAR(50),
    dept_location VARCHAR(50)
);

-- 2. 创建员工表,并且在员工表中添加一个外键指向部门表的id主键
CREATE TABLE emp(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(50) NOT NULL,
    sex VARCHAR(10),
    dept_id INT,
    CONSTRAINT fkey_01 FOREIGN KEY (dept_id) REFERENCES dept (id) -- 在建表时指定外键约束
);

2.3.2 在建表后指定外键约束

-- 在创建表之后添加外键
alter table emp add constraint  fkey_01 foreign key (dept_id) references dept (id);

2.4 删除外键约束的语法

-- 删除外键
ALTER TABLE emp DROP FOREIGN KEY fkey_01;

2.5 外键约束的要求

2.6 外键约束等级

如果没有指定等级,就相当于Restrict方式。

三、多表间关系

3.1 一对多关系

3.1.1 概念

一对多的关系是指主表的一行数据可以同时对应从表的多行数据,反过来就是从表的多行数据指向主表的同一行数据。

3.1.2 应用场景

分类表和商品表、班级表和学生表、用户表和订单表。

3.1.3 建表原则

将一的一方作为主表,多的一方作为从表,在从表中指定一个字段作为外键,指向主表的主键。

-- 2. 一对多的表关系
-- 建表原则:以一的一方作为主表,多的一方作为从表,在从表中指定一个字段作为外键指向主表的主键
CREATE TABLE category(
    cid INT PRIMARY KEY AUTO_INCREMENT,
    cname VARCHAR(50)
);

CREATE TABLE product1(
    pid INT PRIMARY KEY AUTO_INCREMENT,
    pname VARCHAR(50),
    price DOUBLE,
    cid INT
);

3.2 多对多关系

3.2.1 概念

两张表都是多的一方,A表的一行数据可以同时对应B表的多行数据,反之B表的一行数据也可以同时对应A表的多行数据

3.2.2 应用场景

订单表和商品表、学生表和课程表

3.2.3 建表原则

新建一张中间表,在中间表中定义两个字段,这两个字段分别作为外键指向两张表各自的主键。

-- 3. 多对多的表关系
-- 建表原则:两张表都是多的一方,要新创建一张中间表,在中间表中指定俩字段分别作为外键指向两张主表的主键
CREATE TABLE student1(
    sid INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(50)
);

CREATE TABLE course(
    cid INT PRIMARY KEY AUTO_INCREMENT,
    cname VARCHAR(20)
);

CREATE TABLE t_s_c(
    sno INT,
    cno INT
);


ALTER TABLE t_s_c ADD CONSTRAINT fkey01 FOREIGN KEY (sno) REFERENCES student1 (sid);
ALTER TABLE t_s_c ADD CONSTRAINT fkey03 FOREIGN KEY (cno) REFERENCES course (cid);

3.3 一对一关系

3.3.1 两种一对一关系

3.3.2 建表原则

在从表中指定一个字段创建外键并指向主表的主键,然后给从表的外键字段添加唯一约束。

学海无涯苦作舟

上一篇下一篇

猜你喜欢

热点阅读