MySQL数据库建模过程可以分为
需求分析阶段、概要设计阶段、详细设计阶段、代码编写阶段、软件测试阶段
下面主要介绍一下概要设计阶段的E-R模型图的设计以及三大范式。
E-R图设计
在E-R图中,实体用矩形表示,属性用椭圆表示,关系用菱形表示。
实体之间的关系:
一对一(1:1):一个实体最多只能能另一个实体相关联,另一个实体如是。
例:一个只能有一张身份证。
一对多(1:n): 一个实体可以和别的实体任意关联(他们只能和前面的实体关联)
例:一个班有多名学生。
多对多:(n:n):一个实体可以和别的实体任意关联(他们也可以和前面的实体任意关联)
例:一个学生可以选择多门课程,一门课程对应多名学生。
实例:
设某汽车运输公司数据库中有三个实体集。一是“车队”实体集,属性有车队号、车队名等;二是“车辆”实体集,属性有牌照号、厂家、出厂日期等;三是“司机”实体集,属性有司机编号、姓名、电话等。;车队与司机之间存在“聘用”联系,每个车队可聘用若干司机,但每个司机只能应聘于一个车队,车队聘用司机有“聘用开始时间”和“聘期”两个属性;车队与车辆之间存在“拥有”联系,每个车队可拥有若干车辆,但每辆车只能属于一个车队;司机与车辆之间存在着“使用”联系,司机使用车辆有“使用日期”和“公里数”两个属性,每个司机可使用多辆汽车,每辆汽车可被多个司机使用。
请根据以上描述,绘制相应的E-R图,并直接在E-R图上注明实体名、属性、联系类型。
E-R图:
三大范式
第一范式: 要求表的每个字段必须是不可分割的独立单元
student : name -- 违反第一范式
张小名|狗娃
sutdent : name old_name --符合第一范式
张小名 狗娃
第二范式: 在第一范式的基础上,要求每张表只表达一个意思。表的每个字段都和表的主键有依赖。
employee(员工):
员工编号 员工姓名 订单名称 --违反第二范式
员工表:员工编号 员工姓名
订单表: 订单编号 订单名称 -- 符合第二范式
第三范式: 在第二范式基础,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系。
员工表: 员工编号(主键) 员工姓名 部门编号 部门名
--符合第二范式,违反第三范式 (数据冗余高)
员工表:员工编号(主键) 员工姓名 部门编号
--符合第三范式(降低数据冗余)
部门表:部门编号 部门名