发表于: 2019-12-28 23:59:19

1 1057


今天完成的事情:


关于数据库设计的基本步骤:

1)需求分析:业务系统中有哪些数据?这些数据有哪些属性?

2)逻辑设计:将需求转化为数据库的逻辑模型,通过ER图形式将逻辑模型描述展示出来

3)物理设计:这个阶段涉及到数据库中建表,选择字段类型的问题,列的数据类型一方面影响相应数据的存储空间的开销,另一方面也会影响数据查询性能。当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制,最后是字符串类型。对于相同级别的数据类型,在满足业务的情况下,应该优先选择占用空间小的数据类型。在对数据进行比较操作时,同样的数据,字符串处理比数字处理更慢。

选择数据类型优先度:数字 > 日期/二进制  >字符串 





学习了最常用的数据库设计三大范式:


第一    数据库表中的所有字段值都是不可分解的原子值


这个最好理解,就是每个字段不能再拆分


比如:

可以拆成:



 第二范式:保证一张表只描述一件事情


这是通俗的说法,用第二范式的定义描述第二范式,说的是在满足第一范式的基础上,数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,也即所有非关键字段都完全依赖于任一组候选关键字。


这谁看得懂啊,继续举例子



上表满足第一范式,即每个字段不可再分,但是这张表设计得并不好,或者说,这张表的设计并不满足第二范式。因为这张表里面描述了两件事情:学生信息、课程信息,"学分"完全依赖于"课程名称"、"姓名"与"年龄"完全依赖于"学号"。这么做的后果是:
1、数据冗余:同一门课程由n个学生选修,"学分"重复n-1次;同一个学生选修了m门课程,姓名和年龄重复m-1次
2、更新异常:若调整了某门课程的学分,数据表中所有行的"学分"值都需要更新,否则会出现同一门课程学分不同的情况
3、插入异常:假设要开一门新课程,暂时没有人选修,那么由于没有"学号"关键字,"课程"与"学分"也无法记录入数据库

4、删除异常:假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,"课程"和"学分"也被删除了,显然,这最终可能会导致插入异常

增加了表,将学生信息与课程信息通过一张中间表关联,很好地解决了上面的几个问题

这就是第二范式的中心: 保证一张表只讲一件事情。


第三范式----保证每列都和主键直接相关


简单的说就是说表中的字段和主键直接对应不依靠其他中间字段,说白了就是,决定某字段值的必须是主键



存在问题:  

这个表的主键是学号,但主键学号  无法决定  学院地点 和学员电话,只能决定 姓名,年龄,学院

学院才能决定 学院地点和学院电话

这就不符合第三范式


修改之后的表结构如下图:

完毕



另外关于1对1  1 对多  多对多的主键外键设置


1. 一对一实例:

一个人对应一张身份证,一张身份证对应一个人


一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面



2.一对多关系实例

一个班级拥有多个学生,一个学生只能够属于某个班级


班级表是1     学生表是多    

那么多端里面应该放置1端的主键

学生表里面应该放置班级表里面的主键




3.多对多实例

一个学生可以选修多门课程,一个课程可以被多个学生选修


两个多对多关系的表  是无法互相设置外键的


这个就需要一个新建中间表作为转换


中间表可以和学生表是1对多关系

中间表可以和课程表是1对多关系


然后在多的表里设置1的主键



关于主键  外键 索引




今天学习了半天,学的少,只学习了这些。


明天计划的事情:


创建数据表 及 接口文档




返回列表 返回列表
评论

    分享到