数据库设计
三个方面
- 数据库模式
- 访问和更新数据库的程序
- 控制数据访问的安全模式
六个阶段
- 需求分析:分析用户的需求,包括数据、功能和性能需求
- 概念结构设计:主要采用E-R模型进行设计,包括画E-R图
- 逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换
- 数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径
- 数据库的实施:包括编程、测试和试运行
- 数据库运行与维护:系统的运行与数据库的日常维护
设计数据库避免
- 冗余:存在重复的信息
- 不完整:导致难于建模
实体-联系模型
通过允许定义代表数据库全局逻辑结构的企业模式实现
基本概念
- 实体集
- 相同类型即具有相同性质(属性)的一个实体集合
- 实体集的外延指属于实体集的实体的实际集合
- 联系集
- 相同类型联系的集合
- 可以具有描述性属性
- 实体集之间的关联称为参与,实体集 E1,E2,…,En 参与联系集 R <script type="math/tex" id="MathJax-Element-2">R</script>
- 联系实例表示在所建模的现实世界企业中命名实体间的一个关联
- 实体在联系中扮演的功能称为实体的角色
- 参与联系集的实体集数目称为联系集的度
- 属性
- 实体集中每个成员所拥有的描述性性质
- 每个实体的每个属性都有一个值
- 属性可取值的集合称为属性的域或值集
- 属性分类
- 简单和复合属性:简单属性不能划分成更小部分,复合属性可以再划分成更小的部分(其他属性),例如name可以包括first_name, middle_initial, last_name
- 单值和多值属性:单值属性只有一个值,多值属性可能对应一组值,例如电话号码
- 派生属性:派生属性的值可以从别的相关属性或实体派生出来,如果通过date_of_birthday可以计算出age,date_of_birth称为基属性,age为派生属性。派生属性的值不存储,在需要的时候计算出来
映射基数
实体通过一个联系集能关联的实体的个数
分类
- 一对一
- 一对多
- 多对一
- 多对多
参与约束
- 实体集E中每个实体都参与到联系集R的至少一个联系中,E在R中的参与称为全部的
- E中只有部分实体参与到R的联系中,E到R的参与称为部分的
联系集主码
实体集的主码的并集构成了联系集的超码
- 一对一:任意一个实体集的主码可以作为联系集的主码
- 一对多:多的实体集的主码作为联系集的主码
- 多对一:多的实体集的主码作为联系集的主码
- 多对多:实体集的主码的并集作为联系集的主码
弱实体集
没有足够的属性以形成主码的实体集称为弱实体集(有主码的实体集称作强实体集)
- 弱实体集必须与另一个标识实体集关联才有意义
- 弱实体集存在依赖于标识实体集
- 标识实体集拥有弱实体集
- 将弱实体集与标识实体集相连的联系称为标识性联系
- 弱实体集的主码由标识实体集的主码加上弱实体集的分辨符(部分码)构成
实体-联系模型局限
- 不能表达联系间的联系
- 解决方法
- 使用聚集,通过这种抽象,联系被视为高层实体
实体-联系设计问题
用实体集还是属性
- 依赖于被建模的现实世界的企业的结构
常见错误
- 一个实体集的主码作为另一个实体集的属性,而不是用联系
- 相关实体集的主码作为联系集的属性
- 用实体集还是联系集
- 当描述发生在实体间的行为时采用联系集
- 二元还是n元
- 一个n元联系集总可以用一组不同的二元联系集代替
- 联系属性的布局
- 一对一联系集属性可以放在任意一个实体集中
- 一对多联系集的属性仅可以放在多的实体集中
- 多对多联系集属性必须放在多对多联系集中
特化和概化
特化——自顶向下
在实体集内部进行分组的过程
特化实体与另一方构成ISA关系,形成超类-子类联系
特化方法
- 重叠特化
- 不相交特化
概化——自底向上
多个实体集根据共同具有的特征综合成一个较高层的实体集
特化的逆过程
概化方法
- 重叠概化
- 不相交概化
特化和概化比较
- 特化从单一的实体集出发,通过创建不同的低层实体集来强调同一实体集中不同实体间的差异
- 概化强调低层实体集间的相似性并隐藏它们的差异,由于共享属性的不重复出现,它还使表达简洁
约束
- 条件定义的成员资格
- 在条件定义的低层实体集中,成员资格的确定基于实体集是否满足一个显示的条件或谓词
- 用户定义的成员资格
- 由数据库用户将实体指派给某个实体集
- 不相交特化/概化
- 一个实体至多属于一个低层实体集
- 重叠特化/概化
- 一个实体集可以同时属于多个低层实体集
- 全部特化/概化
- 每个高层实体必须属于一个低层实体集
- 部分特化/概化
- 允许一些高层实体不属于任何低层实体集
继承
- 属性继承
- 高层实体集的属性被低层实体集继承
- 参与继承
- 高层实体集参与的联系集被低层实体集继承
- 单继承和多继承
E-R模式转换为关系模式
- 实体集和联系集都有唯一的关系模式与之对应,关系模式名即为相应的实体集或联系集名称
- 强实体集转换而来的模式的主码是强实体集的主码,属性是强实体集的属性
- 弱实体集转换而来的模式的主码由依赖的强实体集的主码与弱实体集的分辨符组合而成,属性包括弱实体集的属性。由强实体集的主码生成的属性参照强实体集
- 派生属性不在关系数据模型中显式地表示出来
- 多值属性创建新的关系模式,包含该属性所在的实体集或联系集的主码,自己的属性。由实体集或联系集的主码生成的属性参照实体集或联系集所生成的关系
- 联系集转换而来的模式的主码是联系集的主码,属性包括所有参与R的实体集的主码的并集和描述性属性
- 在一对一的联系情况下,联系集的关系模式可以跟参与联系的任何一个实体集的模式进行合并,合并后模式的主码是融入联系集模式中的实体集的主码
- 在多对一的联系下,如果多的实体集参与是全部的,联系集的关系模式可以跟实体集的模式进行合并,合并后模式的主码是融入联系集模式中的实体集的主码;如果参与是部分的,可以通过使用空值来进行模式的合并
- 连接弱实体集和依赖的强实体集的联系集是冗余的,不需要给出
- 低层实体集创建一个模式,模式中的属性包括对应于低层实体集的每个属性,以及对应于高层实体集主码的每个属性,主码属性参照高层实体集关系
- 聚集的关系模式的主码时定义该聚集的联系集的主码
E-R图表示法的符号