当你写表的时候有没有出现过一条数据要打很多行,而且有很多重复的,看起来也极其不舒服,而且也不方便。
如:
张三 计算机成绩100分,如果再多加几科成绩,会是什么样子呢?
根据表图就能发现,除了学科和成绩两列,其余的都是重复字段。
这时候我们就需要进行表拆分。
把这个表拆分成两个表,一个学生信息表,一个学生成绩表,用学号进行两表关联,表是不是看起来就好一些。
拆分表的目的:
为了解决数据冗余问题,可以减少重复数据的存储,表的结构也更加清晰了。拆分之后,在某些业务下,需要查询多个表,速度减低了
表与表之间的关系:
一对一
人与身份证的关系:
注意:
(1) 一对一不存在数据容易问题?可以不拆分表么?可以。
(2) 什么场景需要拆分
用户信息+身份证+…表中的字段太多时使用
一对多
最常见的关系:
学生和成绩的关系:1个学生有多个成绩。
部门和员工的关系:1个部门有多个员工。
这种关系怎么去建立,怎么去表达
在“多”的一方,存储“一”的主键ID。
在成绩表中存储用户的ID。
在员工表中存储部门的ID
建表:使用主外键实现。
扩展:
主键
主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 。
外键
外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
多对多
常见的案例:
老师与学生的关系:一个老师对应多位学生,一个学生对应多位老师:
用户与商品的关系:
用户和权限的关系:
这种关系怎么去建立,怎么去表达:借助第三张表
用户和商品:订单(谁(用户ID)什么时候买了什么商品(商品ID))