流沙团
mysql表设计原则(简单)
2016-8-7 流沙团


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;
















发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容