数据库基础--多表关系,多表查询
前言:
本篇是学习Javaweb的一个学习笔记(黑马web开发),数据库能帮助我们组织和管理网站应用产生的数据,因此我们要好好了解数据库的操作和使用。
多表关系:
一对多:
概念:
一对多关系就像他文字表述的一样,指的是一个实体(表)中的单个记录可以关联到另一个实体(表)中的一个或多个记录,(比如:一个部门可以拥有多个员工,但每个员工只能属于一个部门。“部门”表和“员工”表之间形成了一对多的关系)我们通常用外键来实现。
实现:
外键分为两种:物理外键和逻辑外键:
- 物理外键
先来看看实现代码:
-- 基本结构
-- 创建表时指定
create table 表名(字段名 数据类型,...[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);-- 建完表后,添加外键
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);--实例:
-- 添加外键约束
-- emp(员工表),demp(部门表)一个部门对应多个员工
alter table emp add constraint fk_dept_id foreign key (dept_id) references dept(id);
-
概念:使用foreign key定义外键关联另外一张表。
-
缺点:
- 影响增、删、改的效率(需要检查外键关系)。
- 仅用于单节点数据库,不适用于分布式、集群场景。
- 容易引发数据库的死锁问题,消耗性能。
-
逻辑外键
- 概念:在业务层逻辑中,解决外键关联。
- 通过逻辑外键,就可以很方便的解决上述问题。
注意:在现在的企业开发中,很少会使用物理外键,都是使用逻辑外键。 甚至在一些数据库开发规范中,会明确指出禁止使用物理外键 foreign key