数据库设计:(三大范式看情况遵守,不一定死守这三个规范)
第一范式:要求表的每个字段都必须独立的不可分割的最小单元。
第二范式:要求表的除主键外的其他字段都和主键有依赖关系。(一张表表达一个意思)
工表:employee
员工编号 员工姓名 部门名称 订单名称(这里违反) –违反第二范式,即不能出现与表无关的字段
员工表:employee
员工编号 员工姓名 部门名称
–符合第二范式
第三范式:要求表的除主键外的其他字段都只能由主键决定。
当用到外键约束时,一般则满足第三范式
多表查询:
1)内连接查询: inner join
作用: 当两种表满足了连接条件时的数据才会显示。
2)左外连接: left outer join
作用:左表完全显示。右表的数据如果满足了连接条件,则显示对应的数据,如果不满足条件,那么显示null。、
SELECT d.name,e.name
FROM dept d
LEFT OUTER JOIN employee e
ON d.id=e.deptId;
3)右外连接: right outer join
作用:右表完全显示。左表的数据如果满足了连接条件,则显示对应的数据,如果不满足条件,那么显示null。
SELECT d.name,e.name
FROM employee e
RIGHT OUTER JOIN dept d
ON d.id=e.deptId;
数据约束:
默认值: default 默认值
唯一: unique
非空: not null
主键:primary key (唯一+非空 )
自增长: auto_increment
级联操作:
级联更新: on update cascade
级联删除: on delete cascade
级联: 当有了外键的时候,我们希望修改或删除数据的时候,修改或删除了主表的数据,同时能够影响副表的数据,这时就可以使用级联。
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
deptId INT,
— 添加级联修改: ON UPDATE CASCADE
— 添加级联删除: ON DELETE CASCADE
CONSTRAINT employee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
— 外键名称 外键字段 参考
)
外键: foreign key:
添加外键约束(foreign key)
— 需求:deptId字段值来自于dept表的id字段的值,这时可以给deptId字段添加外键约束。
— 员工表(副表: 被别的表约束。外键设置在副表)
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
deptId INT,
CONSTRAINT employee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
— 外键名称 外键字段 参考
)
— 部门表(主表:约束别人的表)
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
)
当有了外键之后,应该如何管理数据呢?
— 插入数据: 先插入主表的数据,再插入副表数据
— 修改数据: 先修改主表数据,再修改副表数据
— 删除数据:先删除副表数据,再删除主表数据