定义

  • 属性(Attribute): 表的每一列具有固定的属性类别。

    • 如姓名(Name)、年龄(Age)、地址(Address)、电话号码(PhoneNumber)等。
  • 域(Domain): 每个属性所限定的数据类型及其取值范围。
    • 常用的域有字符串(STRING)、日期(DATE)、整型数(INT)等。
  • 元组(Tuple): 表的每一行称为一个元组,用来标识一个实体,表中不能出现相同的两个元组。
    • 单个元组的取值必然是所有域的笛卡尔积(Cartesian Product)的一个元素。
    • 如 {'Sunday', ‘2019-08-02‘, 100} 是 {STRING, DATE, INT} 的一个元素。
  • 关系(Relation): 由行和列交错形成的二维表(Table),它表示一类数据关系。
    • 单个二维表的取值必然是所有域的笛卡尔积(Cartesian Product)的一个子集。
  • 关系模式(Relation Schema): 定义的多个二维表及其包含的所有属性。
    • 它包括表名和一系列的属性
    • 每个属性都跟域相关联
ENROL(StudentID, CourseNo, Semester, Status, EnrolDate);
ENROL(StudentID: INT, CourseNo: STRING, Semester: STRING, Status: STRING, EnrolData: DATE);
  • 关系数据库模式(Relational Database Schema)

    • 它是多个关系模式的集合(包括表名和所有属性);
    • 它是一个关于完整性约束(Integrity Constraints,IC)的集合。

  • 关系数据库状态(Relational Database State)

    • 它是多个关系 / 表的集合;
    • 在某一个具体时刻,一种关系数据库模式只存在一种关系;
    • 所有的关系 / 表都满足完整性约束 (IC)。

关系型数据库的完整性约束

1、域约束(Domain Constraints)

元组中的每一个值必须是在其属性的取值范围之中,即既要符合定义的数据类型,又要在取值范围之中。

2、关键字约束(Key Constraints)

超键(SuperKey):在一个关系 / 表中,不存在两个独立元组的超键有相同的取值,即每一个独立元组超键的取值必不相同。

候选键(Candidate Key):当一个超键不存在它的子集仍然为超键时,这个超键被称为最小超键(minimal),也称候选键。

主键(Primary Key):取候选键集合中的其中一个,可作为当前关系 / 表的主键(主键是惟一的)。

举几个例子说明一下

  • {DoB} 是关系 STUDENT 的一个超键吗?

    • 不是,因为不同的元组可能在 DoB 这个属性上取相同的值,即可能存在出生日期相同的两个学生。
  • {StudentID, DoB} 是关系 STUDENT 的一个超键吗?
    • 是的,因为通过这一组属性,能唯一区分出一个独立的元组。
  • {StudentID, DoB} 是关系 STUDENT 的一个候选键吗?
    • 不是,因为存在它的子集 {StudentID} 也同样是一个超键,同时这还是一个最小的超键,因此是一个候选键。
  • {StudentID} 是关系 STUDENT 的一个候选键吗?
    • 是的,理由如上。
  • {DoB} 是可以选为关系 STUDENT 的主键吗?
    • 不是,DoB本身不是一个超键,更不会是一个候选键,所以不能作为主键。

3、实体完整性约束(Entity Integrity Constraints)

实体完整性约束主要是对主键取值的约束。由于主键是用于独立区别同一个关系中的不同元组,因此每一个元组的主键取值不能为 NULL,即不能为空。通常在定义关系或者定义属性的时候,使用 NOT NULL 关键字对主键进行修饰。

注意:关系表 R 中的其他属性也有可能被限定不能为空(NULL),即便它们并不是当前关系表的主键,但是主要一个属性是关系表的主键,那它的取值绝对不能为 NULL。

4、引用完整性约束(Referential Integrity Constraints)

通过观察发现,在存在多个关系表的关系数据库模式中,数据实体并不会独立存在于单一的关系表中。意思就是,任意一个元组(一个数据实体)必然在各个关系表中存在引用关系

前面讨论到的三种约束类型,都是针对单一的关系表;引用完整性约束针对的是两个关系表之间的关系,要求指定两个关系表中间的引用关系。

外键(Foreign Key):对于一个关系表 R1 中的属性 A,取任意一个 R1 中元组,在另一个关系表 R2 中都会存在一个元组,其属性 B 的取值与 A 相等。这种情况下,我们把属性 A 叫做关系表 R1 的外键,R1 叫做引用关系(Referencing Relation),R2叫做依赖关系(Referenced Relation)

举个例子说明一下

在上面的关系数据库模式中,我们可以找出关系表 ENROL 的两个外键:

  1. [ CourseNo ] ⊆ COURSE [ No ]
  2. [ StudentID ] ⊆ STUDENT [ StudentID ]

容易违反约束条件的几种情况

  • 插入操作(Insert)
  • 删除操作(Delete)
  • 更新操作(Update / Modify)

【数据库】数据库入门(二): 关系型数据库相关推荐

  1. 数据库:简述对关系型数据库(RDBMS)的认识

    <数据库:简述对数据库的认识> <数据库:简述对关系型数据库(RDBMS)的认识> <数据库:简述对非关系型数据库(NoSQL)的认识> <数据库:关系型数据 ...

  2. 关系型数据库sql与非关系型数据库nosql

    一.什么是非关系型数据库? 1.非关系型数据库就是区别于关系型数据库的数据库. 2.虽然说起来有点绕嘴,但是非关系型数据库就是因为,关系型数据库处理不了的一些读写问题而产生的数据库 3.我们常用的非关 ...

  3. mysql是关系型数据库吗_mysql属于关系型数据库吗

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. MySQL所使用的 SQL 语言是用于访问数据库的最常用标准 ...

  4. 图数据库:从传统关系型数据库说起

    1.数据库 按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库.网状数据库和关系型数据库.而在当今的互联网中,最常见的数据库模型主要是两种,即SQL关系型数据库和NoSQL非关系型数 ...

  5. mysql关系型数据库的优点和缺点_关系型数据库和非关系型数据库的区别和特点...

    关系型数据库 采用关系模型来组织数据结构的数据库(二维表) cle    DB2    SQLServer    Mysql     SQLite都是关系型数据库 优点:容易理解,它的逻辑类似常见的表 ...

  6. python教程自带数据库_Python入门进阶教程-数据库操作

    Python数据库操作Python版本3.8.0,开发工具:Pycharm 建议本节在掌握了数据库相关操作后再进行学习 MySQL 是最流行的关系型数据库管理系统.本小节通过Python对MySQL数 ...

  7. MySQL数据库是非关系_关系型数据库和非关系型数据库的理解

    综合百度百科和自己的理解整理以下内容,便于日常用到时进行查找,如下: 一.关系型数据库 1.含义: 关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型 ...

  8. 数据库的定义、关系型数据库的四种约束。。

    今天离开C#开始进入数据库的学习,初步认识了一下:1,什么是数据库  2,数据库表的创建  3,关系型数据库的四种约束方法 1,什么是数据库: (1)定义:数据库是存储在计算机硬盘上,有组织,可以共享 ...

  9. 1、数据库是什么?关系型数据库和非关系型数据库又是什么?

    在学习数据库之前,应该先理解什么是数据.本节先介绍数据以及数据库的概念,再对关系型数据库和非关系型数据库的优缺点进行分析. 描述事物的符号称为数据.数据有多种表现形式,可以是数字,也可以是文字.图形. ...

  10. 数据库面试题【十、【非关系型数据库】和【关系型数据库】的【区别】与【优势比较】】

    非关系型数据库的优势: 性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高. 可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非 ...

最新文章

  1. 将页脚保持在页面的底部——Javascript+Css实现
  2. 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量
  3. 波卡链Substrate (3)SRML框架
  4. configparser操作配置文件
  5. 见实私域流量运营词汇手册(1.0版)
  6. 让小黑人360度旋转的制作技巧
  7. C# WebBrowser 设置代理完全解决方案
  8. Spring Boot的每个模块包详解
  9. iOS当期时间和日期选择器
  10. Tensorflow模型变量保存
  11. 先发新机再搞碰瓷,酷派复活就有胜算?
  12. 74HC595级联电路编程篇(三)
  13. Python案例笔记 | 用python制作二维码
  14. Stimulsoft新版本2022.4 版本正式发布|附免费下载试用
  15. 传真百科:雷雨天对传真通讯有影响吗
  16. 一日一签免费算卦_一日一签app免费算卦
  17. 树莓派(Raspberry) WIFI 配置 (无显示器)
  18. jdk配置环境变量(win10)
  19. WSDL简介及WSDL如何查看
  20. 线性回归—求解介绍及回归扩展

热门文章

  1. 详细地址通过正则抽取省市区
  2. Android远程桌面助手(B1309)
  3. [置顶] 程序员面试之道(《程序员面试笔试宝典》)之程序员如何保持身心健康?
  4. 今天开始学Java 如果统计的个数相同,则按照ASII码由小到大排序输出 。
  5. matlab包络分析函数,数据包络分析 (MATLAB代码).doc
  6. antd页面多表单校验
  7. Macbook做Wifi热点,用蓝牙分享
  8. Linux服务器配置静态IP地址方法
  9. 乌镇·Conflux CTO伍鸣:让公链的“不可能三角”成为可能
  10. 一个经济学果粉对国内iOS游戏厂商的5点斥责和5个建议