钱学忠 李京 主编
例如:在课程关系T中,若“课程名”属性为主码,则“课程名”属性不能取空值,并且课程名要唯一。 (2)参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S可能是相同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。
例如,对于“学生(学号,姓名,性别,年龄,系别号)、系别(系别号,系名)”两关系,“系别号”为学生关系的外码。它要满足参照完整性。对于学生关系中的每个元组的“系别号”属性只能取下面两类值:空值,表示尚未给该学生分配系别;非空值,则该值必须是系别关系中某个元组的“系别号”的值,表示该学生不可能分配到一个不存在的系中,即被参照关系“系别”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。
(3)用户定义的完整性:用户定义的完整性就是针对某一具体应用的关系数据库所制定的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
例如,对于学生关系中的年龄,我们可以按需要定义“年龄>8并且年龄<45”的自定义规则。 5、关系代数运算有哪两大类,试说明每种运算的操作含义。 解:
1)关系代数的运算按运算符的不同主要分为传统的集合运算和专门的关系运算两类。 (1)传统的集合运算:包括并、交、差、广义笛卡尔积四种运算。 (2)专门的关系运算:包括选择、投影、连接、除等。 2)各运算的操作含义
(1)并:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的所有元组组成。记作:R∪S={t|t R∨t S}
(2)差:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。记作:R-S={t| t R∧t S }
(3)交:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的所有元组组成。记作:R∩S={t| t R∧t S} (4)广义笛卡尔积: ︵
两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。记作: R×S={t t | t R∧t S}
(5)选择:选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作: (R) = {t|t∈R∧F(t)=“真”}
(6)投影:关系R上的投影是从R中选择出若干属性列组成新的关系。记作: ∏(R) = { t[A] | t R } (7)连接: ︵
连接也称为θ连接。它是从两个关系的广义笛卡尔积中选取属性间满足一定条件的元组。记作: ={ t t |t ∈R∧t ∈S∧t [A]θt [B] } ︵
θ为”=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为:
={ t t | ∈R∧t ∈S∧t [A]=t [B]}。为此: = A=B(R×S) -