数据库有关概念

关系数据库

绝大多数的数据库系统叫做关系数据库系统(relational database system), 他们是基于关系数据模型的(relation data model), 具有3大关键组成部分:结构(structure), 完整性(integrity), 语言(language):
1. 结构:定义数据的表示
2. 完整性:数据约束
3. 语言:提供了访问和操纵数据的方式

关系结构 (relational structures)

关系模型(relational Model)建立在简单自然的结构的基础之上,
Relation(关系):是一个没有重复行的表
表的每一行(row)叫做一个记录(record/tuple), 表的一列(column) 表示单个属性值。
row 也叫 tuple(元组), column 也叫 attribute(属性)。

其他关于数据库中的文档中经常出现Relation,Tuple等词,实际上Relation为表,Tuple为记录:
Relation -> Table
Row -> Tuple
Column -> Attribute

完整性约束 (Integrity Constraints)

同一行中的数据相互关联,不同表中的数据也可能通过公共属性(common attributes) 相互关联。

完整性约束是指表中的有效数据应该满足的条件,分3种类型:域约束(domain constraints),主键约束(primary key constraints),外键约束(foreign key constraints)。
域约束和主键约束又称为内部约束(intrarelational constraints): 约束仅涉及到一个表
外键约束又称为外部约束(interralational constraints): 约束涉及到多个表

域约束 (Domain Constraints)

域约束指定属性的许可值(数据类型 + 值大小),可以在标准数据类型的基础上进一步缩小属性值的范围,比如学校的学分可以限定为 1 ~ 5 之间。属性值也可以为 null,表示未知或不可用。

主键约束 (Primary Key Constraints)

超键(superkey) : 是一个属性或属性集,唯一标识表。也就是说,没有两个元组在超键上具有相同的值。
根据定义,一个表由互不重复的元组构成,表中所有属性的集合形成一个超键。
K是一个最小超键,一个表可以有多个键,这种情况下, 每一个键都叫一个候选键。数据库设计者指定候选键之一为主键,主键经常用于标识表中的元组。举例来说,Student表中的StudentId主键, Course表中的CourseId为主键。主键用于区分不同的记录。
对于 Enrollment 表 ssn + courseId 共同构成主键:它是唯一确定一个元组的最小元素集合。

Student Table

ssnfirstNamemilastNamephonebirthDatestreetzipCodedeptID
444111110JacobRSmith91292194341985-04-0999 K Street31435BIOL
444111111JohnKStevenson9129219434null100 M Street31411BIOL
444111112GeorgeKSmith91292134541974-10-101200 A31419CS

Enrollment Table(登记表)

ssncourseIddateRegisteredgrade
444111110111112004-03-19A
444111110111122004-03-19B
444111110111132004-03-19C
444111111111112004-03-19D

Course Table

courseIdsubjectIdcourseNumber titlenumOfCredits
11111CSCI 1301Introduction to Java I4
11112CSCI 1302Introduction to Java II3
11113CSCI 3720Database Systems3

外键约束 (Foreign Key Constraints)

关系数据库中,数据是相互关联。一个表中的元组相互关联。不同表中的元组通过他们的公共属性相互关联。通俗来讲,外键即为若干个表的公共属性。外键定义了表和表之间的关系。
正式地说:如果表R中的一组属性FK引用了表RFK如果满足下列两条规则即为外键:
1. FK中属性的域和 表T中主键的域相同。
2. 表RFK的一个nonnull值必须匹配表T中一个主键的值。
上面的3个表中,Enrollment表中的courseIdforeign key, 引用了Course表中的主键courseId, Enrollment表中的每一个courseId 都必须匹配Course表中的一个courseId值。
包含有 foreign key 的表叫child table, 被引用的表叫 referenced table 或 parent table。
创建Enrollment表的SQL命令:

create table Enrollment (
    ssn char(9),
    courseId char(5),
    dateRegistered date,
    grade char(1),
    primary key (ssn, courseId), 
    foreign key (ssn) references
    Student(ssn),  
    foreign key (courseId) references
    Course(courseId) 
    ); 

Enrollment 表的 primary key为 ssn + courseId, 有两个foreign key:ssncourseId,Enrollment 为子表,Course 和 Student 均为父表。

强制要求完整性约束 (Enforcing Integrity Constraints)

数据库管理系统会自动强制要求完整性约束,用户任何违反完整性的操作都将被拒绝,例如:
1. 插入违反域约束的记录:例如插入记录(“11115,” “CSCI,” “2490,” “C++ Programming,” 0)到Course表,但credit小时必须大于0.
2. 插入与表中主键重复的记录:DBMS将报告错误,拒绝操作。
3. 试图从Course表中删除记录,但是由于其主键值被Enrollment中的记录引用,此操作也将被DBMS拒绝。


[1] Introduction to Java Programming 10th. 32.2
[2] https://en.wikipedia.org/wiki/Foreign_key
[3] https://en.wikipedia.org/?title=Primary_key&redirect=no

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值