Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束

目录

一、什么是数据库设计三范式?

1.1 第一范式

1.2 第二范式

1.3 第三范式

二、 E-R 模型

三、外键约束

3.0 外键约束的定义

3.1 外键约束的作用:

3.2 条件

3.3 外键约束的添加

3.4 外键约束的删除


一、什么是数据库设计三范式?

数据库设计的三范式是一种范式化技术,用于规范化数据库模式。它们是数据库设计中的一些原则,旨在减少数据冗余并提高数据的一致性和品质。

三范式是逐步递增的,每个范式都在前一个范式的基础上添加一些规则。

1.1 第一范式

第一范式(1NF)要求每个属性只能包含单个原子值,而不是多个值或组合值。这消除了重复的数据并确保每个属性是原子的。

该拆的就拆!

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第1张图片

 

1.2 第二范式

第二范式(2NF)要求满足1NF,一个表必须有一个主键!

并且非主键属性必须完全依赖于整个主键,而不仅仅是主键的一部分。这消除了部分依赖,确保数据的逻辑完整性。

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第2张图片

1.3 第三范式

第三范式(3NF)要求满足2NF,并且消除了传递依赖,即非主键属性之间不能有依赖关系。这样可以确保数据的整体一致性,并避免数据更新异常。

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第3张图片

 

通过遵循这些规范,数据库设计可以更好地组织和管理数据,减少冗余和不一致性,并提高数据库的性能和可维护性。

二、 E-R 模型

MySQL的E-R模型是实体-关系模型,用于设计数据库的结构。

E-R代表实体-关系,其中实体表示一个具有独立身份的对象,可以是任何事物(如人员、部门、产品等),关系表示实体之间的联系。

E-R模型包括以下几个要素:

1. 实体:数据库中具有独立身份的对象,如人员、部门、产品等。

2. 属性:实体具有的特征,如人员的姓名、年龄、性别等。

3. 关系:实体之间的联系,可以是一对一、一对多、多对多等。

4. 范围:表示实体和关系的限制条件,如一个人员可以属于一个部门,一个部门可以有多个人员。

在MySQL中,E-R模型通过DDL(数据定义语言)的方式实现,常用的指令包括CREATE TABLE、ALTER TABLE和DROP TABLE等。

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第4张图片

 

在设计E-R模型时,需要考虑实体和关系之间的约束条件和业务规则,以确保数据库的数据完整性和一致性。

三、外键约束

3.0 外键约束的定义

MySQL的外键约束是一种限制,用于确保表与表之间的数据的一致性和完整性。

外键是关联两个表的字段或字段集,它在一个表中引用另一个表的主键,以保证在插入或更新表中的数据时,关联表中的数据完整、准确和一致。

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第5张图片

3.1 外键约束的作用:

1. 防止数据的不一致性:外键约束可以确保数据在表之间的一致性,避免数据在表之间不匹配或不完整的情况。

2. 维护数据完整性:外键约束可以确保插入或更新数据时,相关表中的数据完整和准确,不允许插入或更新不符合约束条件的数据。

3. 提高查询效率:外键可以提高查询的效率,因为可以在关联表之间建立索引,加快查询速度。

3.2 条件

在MySQL中,外键约束需要满足以下两个条件:

1. 外键字段必须与目标表的主键或唯一键相匹配。

2. 外键字段必须是NOT NULL类型的。

3.3 外键约束的添加

可以使用ALTER TABLE语句来添加或删除外键约束。例如,要在表中添加一个外键约束,请使用以下语法:

ALTER TABLE 表名 ADD CONSTRAINT 外键名FOREIGN KEY (字段) REFERENCES 另一表名(字段);

示例

现在有 表 stu class

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第6张图片

 

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第7张图片

 

 添加外键约束

mysql> alter table stu add foreign key(classID) references class(id);
Query OK, 20 rows affected (0.15 sec)
Records: 20  Duplicates: 0  Warnings: 0

mysql> 

设置外键之后,添加的数据必须满足外键约束

 我们再添加一个数据看一看

故意写一个不满足的验证一下

目前的班级满足条件的应该是 1 2 3 ,在此插入一个班级=100的数据

报错误:外键约束失败,所以不能添加

mysql> insert into stu(name,classID) values('rookie',100);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`base_1`.`stu`, CONSTRAINT `stu_ibfk_1` FOREIGN KEY (`classID`) REFERENCES `class` (`id`))
 

3.4 外键约束的删除

要删除外键约束,请使用以下语法:需要先获取外键名

ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

外键名的获取:

通过查看表创建语句

show create table stu;

Mysql数据库(六) Mysql数据库三范式、E-R模型、外键约束_第8张图片

 可以得到外键约束的名字是:stu_ibfk_1

我们删除外键,然后使用上面插入班级=100的命令试一试 

mysql> alter table stu drop foreign key stu_ibfk_1;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into stu(name,classID) values('rookie',100);
Query OK, 1 row affected (0.02 sec)

mysql> 

成功,说明外键约束被删除了! 


你可能感兴趣的:(#,3,Mysql数据库,数据库,mysql,后端)