数据库——第五章作业

image


解释外键、数据完整性和级联更新。

  1. 外键:已知 \(X\) 是关系 \(R\) 的主键,\(Y\) 是关系 \(S\) 的属性(或属性组)但非 \(S\) 的主键。如果 \(Y\)\(X\) 相对应,则称 \(Y\) 是关系 \(S\) 的外键;
  2. 数据完整性:数据的正确性和相容性。
    1. 数据正确性:数据必须符合实际应用;
    2. 数据相容性:数据在不同的关系中必须符合相应的逻辑关系。
  3. 级联更新:对于违约操作,不是简单的拒绝,而是根据具体情况,把违约更新转换为非违约更新,然后接受更新。

简述数据完整性的内容及其约束规则。

  1. 数据完整性的内容:实体完整性、参照完整性和用户定义完整性。
  2. 约束规则如下:
    1. 实体完整性规则:主属性 \(A\) 的取值不能为空值 \(\tt{}NULL\)
    2. 参照完整性规则:若 \(X\) 是关系 \(R\) 的主键,\(Y\) 是关系 \(S\) 的外键,且 \(Y\)\(X\) 相对应,则 \(Y\) 的取值:要么为空值、要么为 \(X\)
      \(\iff\)\(Y\)\(S\) 的外键,且是 \(R\) 的主键,则 \(Y\) 的取值:要么为空值、要么为 \(R\) 的主键的值。
    3. 用户定义完整性规则:用户根据系统需求自己定义的约束条件。

简述完整性控制机制的基本功能。

  1. 定义功能、检查功能和违约处理
    1. 定义功能:提供完善的定义数据完整性约束的功能,同时提供相应的接口。
    2. 检查功能:对于插入、修改和删除等更新操作,提供检查完整性约束违约的功能。
      \(\iff\) 检查用户操作是否违背了完整性约束条件,对于非违约操作,则执行相应的操作;对于违约操作则执行相应的违约处理。
    3. 违约处理:对于破坏数据完整性的违约操作,提供相应的违约处理能力。
  2. 数据完整性约束的对象。

简述完整性的违约处理方法。

  1. 拒绝更新:拒绝执行更新操作;
  2. 置空:将违约操作所涉及的数据置为空值。
  3. 级联更新

创建关系模式,并完成完整性约束

create table C(
    CNo char(1000) primary key,
    CName char(1000) not null,
    CAddr char(1000) not null
);
create table P(
    PNo char(1000) primary key,
    PName char(1000) not null,
    Price int check(Price >= 20 and Price < 60),
    PSupp char(1000) not null
);
create table R(
    RNo char(1000) primary key,
    CNo char(1000),
    PNo char(1000),
    RDate date not null,
    Quant int not null
);

-- 定义参照完整性
alter table R(
    foreign key(CNo) references C(Cno)
        on delete cascade
        on update cascade,
    foreign key(PNo) references P(Pno)
        on delete cascade
        on update cascade
 );

填空题

  1. 均不能。
    1. 第一个新元组:主键重复。
    2. 第二个新元组:\(\tt{}T11\) 作为 \(P\) 表的外键属性值,未在主键表的主键属性值中出现过。
    3. 第三个新元组:颜色未满足用户自定义约束。
  2. 后者,\(P\) 表中未使用。
  3. 前者,由于 \(P\) 表中出现了 \(\tt{}T20\) ,改动后者会导致外键表违反参照约束。
  4. \(16\)
  5. \(4\)

简答题1

image

  1. 雇员号。
  2. 部门号。
  3. 不是,可能出现重名。
  4. \(\tt{}3.3\) 中第四行更改为 101 张三 06
  5. \(\tt{}3.3\) 中第三行更改为 056 马林 03

简答题2

  1. 代码见下。

    create table R(
        A int primary key,
        B char(2),
        C char(2)
    );
    create table S(
        D char(2),
        E char(2),
        A int,
        foreign key(A) references R(A)
    );
    
  2. 前者不能删,因为 \(S\)\(A\) 中出现过 \(2\) ,而 \(A\) 作为 \(S\) 的外键,若删除,则会破坏参照完整性;对应的,后者可删。
    若上一题考虑了外键的联级更新(如下),则两者均可删,因为主键表的更新会实时更新至外键表。

    create table R(
        A int primary key,
        B char(2),
        C char(2)
    );
    create table S(
        D char(2),
        E char(2),
        A int,
        foreign key(A) references R(A)
            on delete cascade
            on update cascade
    );
    
posted @ 2022-04-26 20:12  hh2048  阅读(167)  评论(0编辑  收藏  举报