create database day22;
use day22;
create table emp(
id int primary key auto_increment,
name varchar(20),
salary double,
job varchar(40)
);
insert into emp values(null,'小丽',6000,'人力资源经理');
insert into emp values(null,'小张',15000,'工程师');
insert into emp values(null,'老王',12000,'财务经理');
insert into emp values(null,'童林',20000,'项目经理');
insert into emp values(null,'敏敏',25000,'技术总监');
create table depart(
id int primary key auto_increment,
name varchar(30)
);
insert into depart values(null,'人力资源部');
insert into depart values(null,'技术研发部');
insert into depart values(null,'财务部');
为了 实现 很好的去反映员工表的员工到底是来自于哪个部分, 所以
在 员工表中添加一列叫做 depart_id , 然后设置相应的值, 就可以知道
员工具体是属于哪个部分的了
alter table emp add depart_id int;
update emp set depart_id=1 where name='小丽';
update emp set depart_id=2 where name='小张';
update emp set depart_id=3 where name='老王';
update emp set depart_id=2 where name='童林';
update emp set depart_id=2 where name='敏敏';
出状况了, 公司经营不善, 决定裁员 ...
将一个部分 给 干掉 --- 思考后决定将技术研发部 干掉
delete from depart where id=2;
会出现 三个哥们 没有 工资 的情况, 因为发工资是按照部门去发的
为了解决这个问题, 在最开始 建立 员工表和部门表的时候, 就 可以
在多表建立的时候 为 表添加上外键约束, 从而可以保证数据的有效性和完整性
insert into depart values(2,'技术研发部');
通过外键约束
alter table emp add foreign key(depart_id) references depart(id);
delete from depart where id=2;
数据库建表时多表设计的原则:
第一类:
一对多的 建表
博客 --- 一个帐号有多篇博客, 一篇肯定是一个帐号写的.
一篇只有一个博主, 一个博主可以写多篇博客 ,, 典型的一对多的关系
第二类:
多对多的建表
第三类:
一对一的建表
一对一建表时, 实际上完全没有必要将其 分为 两个 实体, 完全可以合并到一张表中.
小结:
1.一对一, 可以 合并到一张表
2. 一对多, 可以在多的一方添加 一方的主键作为外键约束
3. 多对多, 需要引入第三张关系表, 会有最基本的两个字段, 分别来自于 两张主体表的主键. 这两个字段
同时就是两个外键约束.
多表查询:
是开发过程中 非常常见的一种需求, 因为 很多时候需要的数据 并不是仅仅存在于 一张表中的.
那么就需要同时去查询 多表中的数据
订单 的
笛卡尔积:
多表查询的时候,多个表乘积的组合结果
多表查询的时候, 笛卡尔积 是数据 不都是有效的
如何从笛卡尔积中筛选出有效数据呢?
select * from emp,depart where emp.depart_id=depart.id;
多表查询的时候, 必须要先筛选出有效的数据,然后 在有效的数据基础之上 做进一步操作...
select * from a,b,c where a.depart_id=b.id and a.aaid=c.ccid;
0则评论给“mysql表设计原则(简单)”