学习数据库表格设计
什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。什么是数据库表数据库中以表为组织单位存储数据。表类似我们的Java类,每个字段都有对应的数据类型。那么用我们熟悉的java程序来与关系型数据对比,就会发现以下对应关系。类----------表类中属性----------表中字段对象---------
什么是数据库
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
什么是数据库表
数据库中以表为组织单位存储数据。
表类似我们的Java类,每个字段都有对应的数据类型。
那么用我们熟悉的java程序来与关系型数据对比,就会发现以下对应关系。
类----------表
类中属性----------表中字段
对象----------记录
在设计表中。根据表于表中的关系进行设计。在这里介绍下他们之间的关系:
将实体与实体的关系, 反应到最终数据库表的设计上来: 将关系分成三种: 一对一, 一对多和多对多.
所有的关系都是指的表与表之间的关系.
一对一
一对一: 一张表的一条记录一定只能与另外一张表的一条记录进行对应;
学生表: 姓名,性别,年龄,身高,体重, 籍贯, 家庭住址
|
Id |
姓名 |
性别 |
年龄 |
体重 |
身高 |
婚姻 |
籍贯 |
住址 |
|
表设计成以上这种形式: 符合要求. 其中姓名,性别,年龄,身高,体重属于常用数据; 但是婚姻,籍贯,住址属于不常用数据. 如果每次查询都是查询所有数据,不常用的数据就会影响效率, 实际又不用.
解决方案: 将常用的和不常用的信息分离存储,分成两张表
常用信息表
|
Id |
姓名 |
性别 |
年龄 |
体重 |
身高 |
|
1 |
|||||
不常用信息表: 保证不常用信息与常用信息一定能够对应上: 找一个具有唯一性(确定记录)的字段来共同连接两张表
|
Id |
婚姻 |
籍贯 |
住址 |
|
|
2 |
||||
|
1 |
一个常用表中的一条记录: 永远只能在一张不常用表中匹配一条记录;反过来,一个不常用表中的一条记录在常用表中也只能匹配一条记录: 一对一的关系
一对多
一对多: 一张表中有一条记录可以对应另外一张表中的多条记录; 但是返回过, 另外一张表的一条记录只能对应第一张表的一条记录. 这种关系就是一对多或者多对一.
母亲与孩子的关系: 母亲,孩子两个实体
妈妈表
|
ID |
名字 |
年龄 |
性别 |
孩子表
|
ID |
名字 |
年龄 |
性别 |
以上关系: 一个妈妈可以在孩子表中找到多条记录(也有可能是一条); 但是一个孩子只能找到一个妈妈: 是一种典型的一对多的关系.
但是以上设计: 解决了实体的设计表问题, 但是没有解决关系问题: 孩子找不出妈,妈也找不到孩子.
解决方案: 在某一张表中增加一个字段,能够找到另外一张表的中记录: 应该在孩子表中增加一个字段指向妈妈表: 因为孩子表的记录只能匹配到一条妈妈表的记录.
妈妈表
|
ID |
名字 |
年龄 |
性别 |
孩子表
|
ID |
名字 |
年龄 |
性别 |
妈妈ID |
|
妈妈表主键 |
||||
多对多
多对多: 一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录; 同时B表中的一条记录也能对应A表中的多条记录: 多对多的关系
老师教学: 老师和学生
老师表
|
T_ID |
姓名 |
性别 |
|
1 |
A |
男 |
|
2 |
B |
女 |
学生表
|
S_ID |
姓名 |
性别 |
|
1 |
张三 |
男 |
|
2 |
小芳 |
女 |
以上设计方案: 实现了实体的设计, 但是没有维护实体的关系.
一个老师教过多个学生; 一个学生也被多个老师教过.
解决方案: 在学生表中增加老师字段: 不管在哪张表中增加字段, 都会出现一个问题: 该字段要保存多个数据, 而且是与其他表有关系的字段, 不符合表设计规范: 增加一张新表: 专门维护两张表之间的关系
老师表
|
id |
姓名 |
性别 |
|
1 |
A |
男 |
|
2 |
B |
女 |
学生表
|
id |
姓名 |
性别 |
|
1 |
张三 |
男 |
|
2 |
小芳 |
女 |
中间关系表: 老师与学生的关系
|
id |
t_id(老师) |
s_id(学生) |
|
1 |
1 |
1 |
|
2 |
1 |
2 |
|
3 |
2 |
1 |
|
4 |
增加中间表之后: 中间表与老师表形成了一对多的关系: 而且中间表是多表,维护了能够唯一找到一表的关系; 同样的,学生表与中间表也是一个一对多的关系: 一对多的关系可以匹配到关联表之间的数据.
由此可见,设计表首要任务是明白表于表之间的关系。判断是一对一,一对多,还是多对多关系。在进行设计。
更多推荐




所有评论(0)