数据库设计
MySQL数据库建模过程
需求分析阶段:分析客户的业务和数据处理需求
概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整
详细设计阶段:应用三大范式审核数据库结构
代码编写阶段:物理实现数据库,编码实现应用
软件测试阶段:……
安装部署:……
设计数据库的步骤
1.了解需求
与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务
2.标识实体 (Entity)
标识数据库要管理的关键对象或实体(名词)
3.标识每个实体的属性(Attribute)(名词)
4.标识实体之间的关系(Relationship)(动词)
2.标识实体 (Entity)
标识数据库要管理的关键对象或实体(名词)
3.标识每个实体的属性(Attribute)(名词)
4.标识实体之间的关系(Relationship)(动词)
E-R图设计
在E-R图中,实体用矩形表示,属性用椭圆表示,关系用菱形表示。
在E-R图中,实体用矩形表示,属性用椭圆表示,关系用菱形表示。
映射基数
1.一对一:X中的一个实体最对与Y中的一个实体关联,
并且Y中的一个实体最多与X中的一个实体关联.
Eg:一个人只有一张身份证.
2.一对多:X中的一个实体可以与Y中的任意数量的实体关联;
Y中的一个实体最多与X中的一个实体关联.
Eg:一个班级有多名学生.
3.多对多:X中的一个实体可以与Y中的任意数量的实体关联,反之亦然.
Eg:学生和课程之间的关系,一个学生可以有多门课程,一门课程可以对应多名学生.
并且Y中的一个实体最多与X中的一个实体关联.
Eg:一个人只有一张身份证.
2.一对多:X中的一个实体可以与Y中的任意数量的实体关联;
Y中的一个实体最多与X中的一个实体关联.
Eg:一个班级有多名学生.
3.多对多:X中的一个实体可以与Y中的任意数量的实体关联,反之亦然.
Eg:学生和课程之间的关系,一个学生可以有多门课程,一门课程可以对应多名学生.
表设计
1.如果是1:1的关系:那么将实体转换成表,将任意1端实体的主键拿到另一端实体做外键。
2.如果是1:N的关系:那么将实体转换成表,关系不成表,将1端实体的主键拿到N端实体做外键。
3.如果是M:N的关系:将实体转换成表,关系形成表,同时将两端实体的主键拿过来作为该表的外键,形成复合主键。
数据库设计三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。
要想设计一个结构合理的关系型数据库,必须满足一定的范式。
第一范式(确保每列保持原子性)
第一范式: 要求表的每个字段必须是不可分割的独立单元
第二范式(确保表中的每列都和主键相关)
第二范式: 在第一范式的基础上,要求每张表只表达一个意思。表的每个字段都和表的主键有依赖
第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式: 在第二范式基础,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系。
总结
1.为满足某种商业目标,数据库性能比规范化数据库更重要
通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
通过在给定的表中插入计算列(如成绩总分),以方便查询
2.在数据规范化同时,要综合考虑数据库的性能
通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
通过在给定的表中插入计算列(如成绩总分),以方便查询
2.在数据规范化同时,要综合考虑数据库的性能
例子
某医院病房计算机管理中心需要如下信息:
科室:科室id、科名、科地址、科电话
病房:病房id、床位号、所属科室id
医生:医生id、姓名、职称、所属科室id、年龄、工作证号
病人:病历id、姓名、性别、诊断、主管医生id、病房id
其中,一个病房只能属于一个科室,一个科室可以有多个病房,一个医生只属于一个科室,一个科室可以有多名医生,一个医生可负责多个病人的诊治,一个病人的主管医生只有一个。一个病人只能住一间病房,一间病房可以入住多名病人。
完成如下设计:
(1) 设计该计算机管理系统的E-R图
(2) 将该E-R图转换为关系模式结构。
科室:科室id、科名、科地址、科电话
病房:病房id、床位号、所属科室id
医生:医生id、姓名、职称、所属科室id、年龄、工作证号
病人:病历id、姓名、性别、诊断、主管医生id、病房id
其中,一个病房只能属于一个科室,一个科室可以有多个病房,一个医生只属于一个科室,一个科室可以有多名医生,一个医生可负责多个病人的诊治,一个病人的主管医生只有一个。一个病人只能住一间病房,一间病房可以入住多名病人。
完成如下设计:
(1) 设计该计算机管理系统的E-R图
(2) 将该E-R图转换为关系模式结构。
相关推荐
lwh0 2015-04-21
xiaoxiangyu 2020-06-28
CharlesYooSky 2020-01-07
chenjiazhu 2020-01-03
happinessaflower 2019-12-23
点滴技术生活 2019-11-08
mchaojie 2019-10-29
景泽元的编程 2019-10-24
点滴技术生活 2019-10-20
gaozhennan 2020-08-16
chenjiazhu 2020-07-08
helencoder 2020-06-26
踩风火轮的乌龟 2020-06-02
nan00zzu 2020-05-17
xwb 2020-05-16
dongxurr 2020-04-21