一、ER图绘制
(一)概念
ER图(实体 - 联系图)是用于表示实体之间关系的图形化工具。它通过实体、属性和关系来描述数据模型。
(二)基本元素
-
实体
-
用矩形表示,矩形内写上实体名。例如,“学生”是一个实体,矩形内写上“学生”。
-
实体的属性用椭圆表示,椭圆内写上属性名。例如,“学生”的属性有“学号”“姓名”“年龄”等,每个属性用一个椭圆表示,椭圆用线连接到实体“学生”。
-
主键属性用下划线标注。例如,“学号”是“学生”实体的主键,椭圆内的“学号”文字下方加下划线。
-
-
关系
-
用菱形表示,菱形内写上关系名。例如,“学生”和“课程”之间存在“选修”关系,用一个菱形写上“选修”。
-
关系的两端分别连接相关的实体,并且标注出关系的类型(如一对一、一对多、多对多)。例如,“学生”和“课程”是多对多关系,从“学生”到“选修”关系的线和从“课程”到“选修”关系的线都标注“m:n”。
-
-
联系类型
-
一对一(1:1):例如,一个学生对应一个学籍档案,一个学籍档案对应一个学生。
-
一对多(1:n):例如,一个班级对应多个学生,一个学生只属于一个班级。
-
多对多(m:n):例如,一个学生可以选修多门课程,一门课程可以被多个学生选修。
-
(三)绘制步骤
-
确定实体:根据实际需求,找出系统中的实体。例如,在学校管理系统中,学生、教师、课程等都是实体。
-
确定属性:为每个实体确定其属性。例如,“学生”实体的属性有学号、姓名、性别、年龄等。
-
确定关系:找出实体之间的关系。例如,“学生”和“班级”是一对多关系,“学生”和“课程”是多对多关系。
-
绘制图形:按照上述基本元素的表示方法,用矩形表示实体,用椭圆表示属性,用菱形表示关系,并连接好它们,标注好关系类型和主键。
(四)注意事项
-
实体的属性不能重复,并且要尽量完整。
-
关系的类型要准确,不能混淆。
-
ER图要清晰、简洁,避免交叉线条太多,影响可读性。
二、范式优化的实际应用
(一)范式概念
范式是数据库表结构设计的规范化标准,用于减少数据冗余、提高数据完整性。
(二)常见范式
-
第一范式(1NF)
-
每个字段的值都是不可再分的原子值。例如,一个学生信息表中,“姓名”字段不能包含“张三、李四”这样的值,只能是“张三”或“李四”。
-
实际应用:在设计表时,确保每个字段都是单一的、不可分割的数据项。例如,设计一个员工信息表,不能将“姓名、性别”合并成一个字段,而应该分别设置“姓名”和“性别”两个字段。
-
-
第二范式(2NF)
-
在满足第一范式的基础上,非主属性完全依赖于主键。例如,一个订单表,主键是订单号,“客户姓名”是依赖于订单号的,而不是部分依赖于订单号的某个部分。
-
实际应用:如果发现某个表的非主属性部分依赖于主键,就需要将这个表分解。例如,一个学生选课表,包括学号、课程号、课程名称、课程学分等字段。学号和课程号是主键,课程名称和课程学分只依赖于课程号,不完全依赖于主键,所以需要将课程信息(课程号、课程名称、课程学分)分解到一个单独的课程表中。
-
-
第三范式(3NF)
-
在满足第二范式的基础上,非主属性不依赖于其他非主属性。例如,一个员工信息表,员工的部门名称不应该依赖于员工的职位,而应该只依赖于部门编号。
-
实际应用:如果发现某个表的非主属性之间存在传递依赖,就需要进一步分解表。例如,一个商品销售表,包括商品编号、商品名称、品牌、品牌总部地址等字段。商品名称依赖于商品编号,品牌依赖于商品编号,品牌总部地址依赖于品牌。这种情况下,可以将品牌和品牌总部地址分解到一个单独的品牌表中。
-
(三)范式优化的步骤
-
分析表结构:检查表是否满足第一范式,确保字段都是原子值。
-
检查部分依赖:如果存在部分依赖,将表分解,使每个非主属性完全依赖于主键,达到第二范式。
-
检查传递依赖:如果存在传递依赖,继续分解表,使非主属性之间不依赖,达到第三范式。
-
评估优化效果:优化后,检查数据冗余是否减少,数据完整性是否提高。
(四)实际案例
假设有一个学生信息表,包含以下字段:学号、姓名、班级名称、班级辅导员姓名。
-
第一范式:这个表满足第一范式,因为每个字段都是原子值。
-
第二范式:这个表不满足第二范式,因为“班级名称”和“班级辅导员姓名”只依赖于“班级”,而不是主键“学号”。所以需要分解为两个表:学生表(学号、姓名、班级)和班级表(班级、班级辅导员姓名)。
-
第三范式:分解后的表满足第三范式,因为学生表中的非主属性只依赖于主键,班级表中的非主属性也只依赖于主键。