关于一对多,举个例子,一个用户组可以包含多个用户,每个用户只能属于一个用户组。一个人可以有多辆车,每辆车只能属于一个人。这些都是一对多的关系。
打个比方,一个人可以有多辆车,每辆车只能属于一个人。
两张表,一张表Person,一张表Car。关键是他们两个之间在数据库表中怎么设计关联呢?
Person id<int> name<vechar>;
Car id<int> color<vachar>;
错误做法:
1.在一方加冗余
Person id<int> name<vechar> car_id<int>;
Car id<int> color<vachar>;
为什么会产生冗余?如果有一个人id=1,name=zhangsan,他有两辆车,一辆颜色为红色,一辆颜色为黄色,这样就要存两个字段
id=1,name=zhangsan,car_id=1
id=1,name=zhangsan,car_id=2
解决办法:person取消car_id字段,在car一方加一个person_id(因为一辆车只能属于一个人).
即是“在多方加外键”的方式。
三大范式:
1.要有主键,列不可分
2.联合主键的情况不能出现部分依赖
3.不能存在传递依赖
原则:不要让数据产生冗余!同样的数据存一份就可以。
打个比方,一个人可以有多辆车,每辆车只能属于一个人。
两张表,一张表Person,一张表Car。关键是他们两个之间在数据库表中怎么设计关联呢?
Person id<int> name<vechar>;
Car id<int> color<vachar>;
错误做法:
1.在一方加冗余
Person id<int> name<vechar> car_id<int>;
Car id<int> color<vachar>;
为什么会产生冗余?如果有一个人id=1,name=zhangsan,他有两辆车,一辆颜色为红色,一辆颜色为黄色,这样就要存两个字段
id=1,name=zhangsan,car_id=1
id=1,name=zhangsan,car_id=2
解决办法:person取消car_id字段,在car一方加一个person_id(因为一辆车只能属于一个人).
即是“在多方加外键”的方式。
三大范式:
1.要有主键,列不可分
2.联合主键的情况不能出现部分依赖
3.不能存在传递依赖
原则:不要让数据产生冗余!同样的数据存一份就可以。
但老鸟的原则是:具体问题,具体分析,实事求是。
转载请注明出处:http://blog.csdn.net/acmman