目录
2.1 关系数据库的结构
怎样的结构?
关系数据库由表( table )的集合构成。每个表都有其唯一的表名。表中一行代表了一组值之间的联系。
元组( tuple ):表中一组值的序列。
n元组:有n个值的元组。
在关系模式术语中,关系( relation )就是指表,元组就是指行,属性( attribute )就是值列。
什么是关系实例?
关系实例( relation instance ):一个关系在某特定时刻的内容。
域( domain ):属性的取值范围。
空值( null ):不存在或未知的值。(听说空值会给数据库访问和更新带来很多困难?)
2.2 数据库模式
数据库模式( database schema ) VS 数据库实例( database instance):前者是数据库的逻辑设计,后者是某时刻数据库中数据的快照。
关系 —> 程序中的变量
关系实例 —> 变量的值 (会变化)
关系模式( relation schema ) —> 关系的定义
关系模式由属性序列和各属性对应的域组成。如 department(dept_name, building, budget)。
2.3 码
为什么要用码?
码用于区别关系中不同的元组。
有哪些码?
码的分类:
超码( super key ):能够唯一地标识一个元组的一个或多个属性的集合(该集合的任意超集也算超码)。
候选码( candidate key):也算超码,但这个超码的真子集不能成为超码。
主码( primary key ):用来区分不同元组的候选码。
外码( foreign key ):
参照完整性约束( referential integrity constraint ):一种约束,该约束要求在参照关系中任意元组的特定属性上的取值必须等于被参照关系中某个元组在特定属性上的取值。
如何选择主码?选择极少变化的并具有唯一性的属性。
码的指定代表了被建模的事物在现实世界中的约束。
2.4 模式图
模式图( schema diagram ):数据库中模式的图形化表示,它显示了数据库中关系,属性和主外码。
模式图有什么用?
可用于表示一个含有主码和外码依赖的数据库模式。
缺点:
没有显示出参照完整性约束。
2.5 关系查询语言
查询语言( query language ):用来从数据库中请求获取信息的语言,分为过程化语言和非过程化语言。
过程化语言中,我们指导系统对数据执行一系列操作来计算出结果。
非过程化语言中,我们只需要描述所需信息,而不用给出获取的具体过程。
2.6 关系运算
关系运算:类似于从单个关系中选出满足一些特定谓词( 如salary > 8500 )的特殊元组这样的运算。
关系运算的结果是一个关系,所以关系运算可以施加到查询结果上。
连接运算:把来自两个关系的元组合并成单个元组。
笛卡尔积运算:运算结果包含来自两个关系元组的所有对,无论它们的属性是否匹配。
自然连接运算:一种特殊的等值连接,它要求两个关系进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。例如通过把instructor关系中的每个元组和department关系中对应于教师所在系的元组合并形成。
参考资料
- 《数据库系统概念》 机械工业出版社