数据库关系表 ---- Relational table

  • 什么是关系(relation)
  • 关系(relation)的基本属性
  • 约束(Constraints)
    • Integrity Constraints 完整性约束
    • Referential Integrity 引用完整性
  • 创建一个关系表
  • 如何将ER模型转换为关系表
    • 将entity sets转换为关系表
      • 强实体 Strong Entity
      • 弱实体 Weak Entity
    • 将Relationship Sets转换为关系表
      • Without constraint:
      • With Key Constraints:
      • With Participation Constraints
    • 表示 Composite Attribute
    • 表示 Multivalue Attribute

什么是关系(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
  • 用两个圈圈表示多值属性

数据库关系表 ---- Relational table相关推荐

  1. 简单的数据库关系表建立

    表与表之间一般存在三种关系,即一对一,一对多,多对多关系. 下面分别就三种关系讲解数据库相关设计的思路和思考过程: (1)一对一关系 例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有的夫 ...

  2. navicat打开数据库某个表 报table 啥啥啥 doesn't exist

    情景:把之前programData里面的数据库文件给直接拷贝到我安装目录下 新建的哪个data目录中,然后navicat打开时报错. 原因分析似乎是数据库引擎问题参考点击打开链接: 解决办法:关闭my ...

  3. 数据库设计之E-R图和关系表

    一 概念 E-R图:也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 实体:用矩形框表示,矩形框内写明实体 ...

  4. mysql数据库和表的关系_MySQL数据库学习【第六篇】表与表之间的关系

    表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 ...

  5. SQL巩固以及数据库、表结构优化

    SQL巩固&数据库.表结构优化 前言 对于初级程序开发工程师而言,SQL是很多人的弱项,为此我给大家来做一下总结,希望能够帮到你们. 课程说明 1.介绍项目实战开发过程中常用的MySQL函数及 ...

  6. HBase项目之谷粒微博:创建命名空间,微博内容表,用户关系表,微博收件箱表,发布微博内容,添加关注用户,移除(取关)用户,获取关注的人的微博内容,HBase实战项目

    Hbase实战之谷粒微博 1 需求分析 1) 微博内容的浏览,数据库表设计 2) 用户社交体现:关注用户,取关用户 3) 拉取关注的人的微博内容 2 代码实现 2.1 代码设计总览: 1) 创建命名空 ...

  7. 数据库一对多做链接去重_数据库单表查询-多表查询

    """ 1.字段修改 alter modify alter change alter add ''|first|after alter drop 2.表关系: 一对一:外 ...

  8. day44 数据库单表查询-多表查询

    目录 复习 今日内容 单表查询 连表查询 复习 """ 1.字段修改alter modifyalter changealter add ''|first|afteralt ...

  9. mysql记录相互关系查询_MySQL关系表查询两个表的数据

    如下,有四张表:游戏类型表,游戏表,点卡和游戏关系表,点卡表 CREATE TABLE `gamesType`( `tId` INT AUTO_INCREMENT NOT NULL PRIMARY K ...

最新文章

  1. Cannot format given Object as a Date
  2. ubuntu下mysql中文乱码_Ubuntu的MySQL中文乱码问题--自己躺坑
  3. SWAP使用情况以及muma介绍
  4. Servlet 简介
  5. 几个书本上不常见到的C语言函数
  6. 数字语音信号处理学习笔记——绪论(2)
  7. 图片日志:泛型的作用/hashset的内部实现/常见运行期异常
  8. elsa-core——1.Hello World:Console
  9. MATLAB图像处理与数字信号处理资料分享来袭
  10. python生成二维坐标点_Python numpy:根据坐标创建二维数组
  11. OLAP引擎:基于Druid组件进行数据统计分析
  12. 【生活资讯】5款好用的生活学习类APP
  13. mysql 判断 字母大写_MySQL中查询时对字母大小写的区分
  14. java对xml文件的读写_用java实现对xml文件的读写
  15. 0框架前端-如何写一个下拉菜单(Dropdowns)
  16. “她”和“杰西”:虚拟助手的机器人魅力
  17. 银行核心系统之假期表
  18. Ubuntu Desktop - Disks
  19. java递归红与黑答案,递归--红与黑
  20. 解决androidstudio unable to delete directory的办法

热门文章

  1. 阿里云物联网平台物模型数据解析脚本
  2. centos7 防火墙 错误 (坑)
  3. HEVC学习(二) —— HM的整体结构及一些基本概念
  4. mysql行复制中从库字段与主库字段不一致
  5. 【原】简单的鼠标切换左右键(java版)
  6. python 实现炸金花小游戏
  7. iOS 堆和栈的区别?
  8. java毕业设计家校通管理系统(附源码、数据库)
  9. 关于腾讯云服务器网络收发包PPS一看就懂明了
  10. Geekbench 4 for Mac(mac跑分软件)