数据库关系表 ---- Relational table
数据库关系表 ---- 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)一对一关系 例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有的夫 ...
- navicat打开数据库某个表 报table 啥啥啥 doesn't exist
情景:把之前programData里面的数据库文件给直接拷贝到我安装目录下 新建的哪个data目录中,然后navicat打开时报错. 原因分析似乎是数据库引擎问题参考点击打开链接: 解决办法:关闭my ...
- 数据库设计之E-R图和关系表
一 概念 E-R图:也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 实体:用矩形框表示,矩形框内写明实体 ...
- mysql数据库和表的关系_MySQL数据库学习【第六篇】表与表之间的关系
表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 ...
- SQL巩固以及数据库、表结构优化
SQL巩固&数据库.表结构优化 前言 对于初级程序开发工程师而言,SQL是很多人的弱项,为此我给大家来做一下总结,希望能够帮到你们. 课程说明 1.介绍项目实战开发过程中常用的MySQL函数及 ...
- HBase项目之谷粒微博:创建命名空间,微博内容表,用户关系表,微博收件箱表,发布微博内容,添加关注用户,移除(取关)用户,获取关注的人的微博内容,HBase实战项目
Hbase实战之谷粒微博 1 需求分析 1) 微博内容的浏览,数据库表设计 2) 用户社交体现:关注用户,取关用户 3) 拉取关注的人的微博内容 2 代码实现 2.1 代码设计总览: 1) 创建命名空 ...
- 数据库一对多做链接去重_数据库单表查询-多表查询
""" 1.字段修改 alter modify alter change alter add ''|first|after alter drop 2.表关系: 一对一:外 ...
- day44 数据库单表查询-多表查询
目录 复习 今日内容 单表查询 连表查询 复习 """ 1.字段修改alter modifyalter changealter add ''|first|afteralt ...
- mysql记录相互关系查询_MySQL关系表查询两个表的数据
如下,有四张表:游戏类型表,游戏表,点卡和游戏关系表,点卡表 CREATE TABLE `gamesType`( `tId` INT AUTO_INCREMENT NOT NULL PRIMARY K ...
最新文章
- Cannot format given Object as a Date
- ubuntu下mysql中文乱码_Ubuntu的MySQL中文乱码问题--自己躺坑
- SWAP使用情况以及muma介绍
- Servlet 简介
- 几个书本上不常见到的C语言函数
- 数字语音信号处理学习笔记——绪论(2)
- 图片日志:泛型的作用/hashset的内部实现/常见运行期异常
- elsa-core——1.Hello World:Console
- MATLAB图像处理与数字信号处理资料分享来袭
- python生成二维坐标点_Python numpy:根据坐标创建二维数组
- OLAP引擎:基于Druid组件进行数据统计分析
- 【生活资讯】5款好用的生活学习类APP
- mysql 判断 字母大写_MySQL中查询时对字母大小写的区分
- java对xml文件的读写_用java实现对xml文件的读写
- 0框架前端-如何写一个下拉菜单(Dropdowns)
- “她”和“杰西”:虚拟助手的机器人魅力
- 银行核心系统之假期表
- Ubuntu Desktop - Disks
- java递归红与黑答案,递归--红与黑
- 解决androidstudio unable to delete directory的办法