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

定义

属性(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):取候选键集合中的其中一个,可作为当前关系 / 表的主键(主键是惟一的)。

举几个例子说明一下
关键字约束

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

  • 不是,因为不同的元组可能在 DoB 这个属性上取相同的值,即可能存在出生日期相同的两个学生。

2. {StudentID, DoB} 是关系 STUDENT 的一个超键吗?

  • 是的,因为通过这一组属性,能唯一区分出一个独立的元组。

3. {StudentID, DoB} 是关系 STUDENT 的一个候选键吗?

  • 不是,因为存在它的子集 {StudentID} 也同样是一个超键,同时这还是一个最小的超键,因此是一个候选键。

4. {StudentID} 是关系 STUDENT 的一个候选键吗?

  • 是的,理由如上。

5. {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)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,995评论 0 9
  • 回顾 字段类型(列类型):数值型,时间日期型和字符串类型 数值型:整型和小数型(浮点型和定点型) 时间日期型:da...
    翊溪阅读 4,578评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,041评论 6 13
  • 数据库设计,一个软件项目成功的基石。很多从业人员都认为,数据库设计其实不那么重要。现实中的情景也相当雷同,开发人员...
    wwmin_阅读 4,819评论 0 52
  • 每个初入社会的人,都是满怀憧憬,热情对待这个社会,可往往都是被回馈以欺骗,恐吓,磨灭了热情。 我的一个朋友,小吴,...
    幽律阅读 4,007评论 0 0

友情链接更多精彩内容