mysql表设计原则(简单)


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;








原文链接: mysql表设计原则(简单) 版权所有,转载时请注明出处,违者必究。
注明出处格式:流沙团 ( http://gyarmy.com/post-100.html )

发表评论

0则评论给“mysql表设计原则(简单)”