关系数据库由表(table)的集合构成,每个表都有唯一的名字。
在关系模型的术语中,关系(relation)用来指代表,元组(tuple)用来指代表中的行,属性(attribute)指代表中的列。
例如,下表中instructor关系有四个属性:ID、name、dept_name和salary。
ID | name | dept_name | salary |
---|---|---|---|
22222 | Einstein | Physics | 95000 |
12121 | Wu | Finance | 90000 |
32343 | El Said | History | 60000 |
45565 | Katz | Comp. Sci. | 75000 |
98345 | Kim | Elec. Eng. | 80000 |
76766 | Crick | Biology | 72000 |
10101 | Srinivasan | Comp. Sci. | 65000 |
58583 | Califieri | History | 62000 |
83821 | Brandt | Comp. Sci. | 92000 |
15151 | Mozart | Music | 40000 |
33456 | Gold | Physics | 87000 |
76543 | Singh | Finance | 80000 |
用关系实例(relation instance)这个术语来表示一个关系的特定实例,也就是所包含的一组特定的行。上表中instructor的实例有12个元组,对应12个教师。
对于关系的每个属性,都存在一个允许取值的集合,称为该属性的域(domain)。这样instructor关系的salary属性的域就是所有可能的工资值的集合,而name属性的域是所有可能的教师名字的集合。
如果域中元素被看作是不可再分的单元,则域是原子的(atomic)。我们要求对所有关系r的所有属性的域都是原子的。
如图所示,
D
1
=
{
d
11
,
d
12
,
.
.
.
}
D_1=\{d_{11},d_{12},...\}
D1={d11,d12,...}
笛卡尔积为: D 1 × D 2 × D 3 × . . . D_1×D_2×D_3×... D1×D2×D3×...
关系模式是笛卡尔积的子集。
元组变量:设一个 t t t指代其中一个元组。则 t [ A 1 ] = d 12 , t [ A 2 ] = d 22 t[A_1]=d_{12},t[A_2]=d_{22} t[A1]=d12,t[A2]=d22。
由于关系是元组集合,元组在关系中出现的顺序是无关紧要的,所以关系是无序的。
数据库模式(database schema)和数据库实例(database instance)的区别:前者是数据库的逻辑设计,后者是给定时刻数据库中数据的一个快照。
一个含有主码和外码依赖的数据库模式可以用模式图(schema diagram)来表示。
如图所示,外码依赖用从参照关系的外码属性到被参照关系的主码属性之间的箭头表示:
查询语言(query language)是用户用来从数据库中请求获取信息的语言。可分为两种:
实际使用的查询语言既包含过程化的成分,又包含非过程化的成分。
详见第06章 形式化关系查询语言