什么是关系(relation)

  • 在关系型模型中,数据用关系来表示
  • 一个关系包括
  • relation schema: 关系表名称,字段或者属性名称, 字段范围
  • relation instance: 一组和schema有同样数量字段的元组

关系(relation)的基本属性

  • 每一行(tuple)都是唯一的
  • 没有顺序的要求
  • Degree: 关系表的度是字段的数量
  • 关系表的Cardinality是行(也就是tuple)的数量
    在这里插入图片描述

约束(Constraints)

Integrity Constraints 完整性约束

  • Integrity Constraints: condition specified on a database schema and
    restrict the data that can be stored in a DB instance

完整性约束包括

主键约束 Primary Key Constraint

  • 元组的key fields不能全部重复,也就是不能有两条一样的数据
  • 主键不能为空

外键约束 Foreign Key Constraint

什么是外键

  • 一个关系表(relation)的一组字段指向另外一个关系表(relation)的一行 (有点类似pointer)
  • 通过包含另外一个关系表的primary key实现
  • 外键的domain和所包含的另外一个关系表的primary key一样
  • 需要防止某些操作毁坏表之间的联系
  • 需要防止无效数据插入外键列 — 必须是所指向的表中的数据
  • 外键不能为空

Referential Integrity 引用完整性

  • 如果外键约束全部满足,就可以实现引用完整性

如何实现引用完整性:

  • 现在有两个Entity: Enrolled, Students,
    其中Enrolled的sid属性是一个外键, 指向Students
    Enrolled(sid: string, cid: string, grade: string)
  • 如果现在有一条Enrolled的数据需要被插入, 但是其中的sid是不存在的:拒绝
  • 如果一条Student的数据需要被删除:
  • 同时删除和这条Student数据相链接的Enrolled中的数据
  • 或者拒绝删除这条Student数据
  • 或者将和这条Student数据相链接的Enrolled中的数据的sid设置为default sid. (In SQL, also: Set sid in Enrolled tuples that refer to it to a special value null, denoting ‘unknown’ or `inapplicable’.)

一个没有实现引用完整性的例子
在这里插入图片描述

创建一个关系表

  • 使用 CREATE TABLE 语句
  • 定义attribute, 包括data type, length, NOT NULL等
  • 选择PRIMARY KEY
  • 如果需要,选择FOREIGN KEY

Example: 基本
在这里插入图片描述
Example: 外键

  • The foreign key CUSTOMER_ID references the primary key of CUSTOMER, which is also CUSTOMER_ID
    在这里插入图片描述
  • 对于外键的UPDATE和DELETE操作有四种选项
  • CASCADE: update/delete parent table中的数据, 也update/delete child table所对应的数据
  • NO ACTION: 阻止update/delete parent table中的数据如果child table中有数据的外键指向此条数据
  • SET NULL: update/delete parent table中的数据, 然后将对应的child table中的数据的外键设置为NULL
  • SET DEFAULT: update/delete parent table中的数据, 然后将对应的child table中的数据的外键设置为default value

Example: 主键为两个外键
在这里插入图片描述
Example: 设置主键的两种方法
在这里插入图片描述
在这里插入图片描述

如何将ER模型转换为关系表

  • 基本方法
  • 每个entity set对应一个关系表
  • 每个relationship set对应一个关系表
  • entity set的每个attribute对应一列
  • Indivisibility Rule and Ordering Rule
  • 选择primary key

将entity sets转换为关系表

强实体 Strong Entity

在这里插入图片描述
在这里插入图片描述

弱实体 Weak Entity

  • 当所关联的强实体被删除时,弱实体也需要被删除
  • 创建一个表,将弱实体的每个attribute加入进来
  • 选择一个partial key
  • 将所关联的强实体的主键作为此表的外键
  • 此时弱实体的主键就是partial key + foreign key
    在这里插入图片描述

将Relationship Sets转换为关系表

  • 找出这个Relationship Sets所联系的entity set
  • 将每个参与到此关系的entity set的primary key作为这个关系表的foreign key, 这些foreign key组成了这个关系表的super key
  • identify剩下的描述性的attribute

Without constraint:

在没有constraints的情况下,主键是所有外键的集合
在这里插入图片描述

With Key Constraints:

在这里插入图片描述
在这里插入图片描述

With Participation Constraints

  • 每一个department都必须有一个manager, 所以the participation of Departments in Manages is said to be total
    在这里插入图片描述
  • ssn不能为空,也不能删除数据(ON DELETE NO ACTION) , 因为每个department都需要一个manager
  • 主键是did, 因为department不会重复
    在这里插入图片描述

表示 Composite Attribute

  • 一个属性被分为多个属性表示
  • 每一个属性对应一列
  • composite attribute没有对应的列,是抽象属性
    在这里插入图片描述

表示 Multivalue Attribute

  • 首先构建一个有两列的schema
  • 第一列是有拥有这个多值属性的entity的primary key
  • 第二列是多值属性, 每一个cell对应一个值
  • 多值属性的primary key是所有属性的union
  • 用两个圈圈表示多值属性
    在这里插入图片描述
Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐