Boy wei 2024-05-12 15:04 采纳率: 33.3%
浏览 20

数据库原理及应用实验四数据完整性

1.创建 students 数据库,在该数据库下创建stu表,并同时创建约束,表结构及约束要求如表A-7所示。
表A-7stu 表的结构
字 段 类 型 是否为空 约 東
学号 CHAR(4) 否 主键
姓名 CHAR(8) 是
性别 CHAR(2) 是
出生日期 DATE 是
2.创建表sc,并同时创建约束,表结构及约束要求如表A-8所示。
表A-8sc表的结构
字段 类 型 是否为空 约 東
学号 CHAR(4) 否 外键参照stu表中的学号列(约束名为fk_sno)
课号 CHAR(4) 否
成绩 DECIMAL(5,2) 是 0≤成绩≤100

设置(学号、课号)为主键。
3.创建表course,并同时创建约束,表结构及约束要求如表A-9所示

字段 类型 是否为空 约束
课号 CHAR(4) 否
课名 CHAR(20) 是 唯一约束(约束名为up_cname
学分 INT 是
4.在course 表的课号列上建立主键约束。
5.在sc表的课号列上建立外键约束fk_cno,参照 course 表中课号列的取值,要求实现级联更新。
6.在stu 表的姓名列上建立唯一约束名uq_sname。
7.在course表的学分列上建立检查约束ck_xf,检查条件为学分>0。
8.删除sc 表的外键约束fk_cno、fk_sno。
9.删除stu表的主键约束。
10.删除course表的唯一约束uq_cname。
11.创建测试表test,它包含一个字段date_time,字段类型为VARCHAR(50)
创建触发器test_trig,实现在stu表中每插入一条学生记录自动在test表中追加一条插入成功时的日期时间。SYSDATE()函数用来获取当前的日期和时间。
为stu表插人一条记录引发触发器,查看test表中的内容。
12.在course 表上创建触发器del_ trig,当course 表上删除一门课程时,级联删除sc表中该课程的记录。

  • 写回答

3条回答 默认 最新

  • 笑面虎 2024-05-12 15:04
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】: 您的问题涉及到数据库设计和操作,具体包括创建数据库和表、设置数据完整性约束、创建触发器以及进行数据完整性的维护操作。您需要实现一个包含多个表的数据库系统,确保数据的准确性和一致性,并通过触发器实现特定的数据操作自动化。

    【问题出现原因】: 这个问题出现的原因是您需要根据给定的数据库设计要求,使用SQL语言来创建和维护数据库结构。这通常出现在数据库管理和系统设计的学习或实际工作中,目的是确保数据的完整性、一致性和安全性。

    【问题解决方案】: 为了解决这个问题,您需要按照给定的表结构和约束要求,逐步创建数据库和表,并设置相应的约束。然后,您需要创建触发器以实现特定的自动化操作。以下是解决该问题的步骤:

    1. 创建数据库和表,并设置主键和外键约束。
    2. 创建唯一约束和检查约束。
    3. 创建触发器以实现数据插入和删除时的自动化操作。
    4. 删除不再需要的约束。

    【提供代码】: 以下是创建数据库、表和触发器的SQL代码示例:

    -- 创建students数据库
    CREATE DATABASE students;
    
    -- 使用students数据库
    USE students;
    
    -- 创建stu表
    CREATE TABLE stu (
        sno CHAR(4) PRIMARY KEY,
        sname CHAR(8),
        sex CHAR(2),
        birthdate DATE
    );
    
    -- 创建sc表
    CREATE TABLE sc (
        sno CHAR(4),
        course_id CHAR(4),
        score DECIMAL(5, 2),
        PRIMARY KEY (sno, course_id),
        FOREIGN KEY (sno) REFERENCES stu(sno),
        FOREIGN KEY (course_id) REFERENCES course(course_id)
    );
    
    -- 创建course表
    CREATE TABLE course (
        course_id CHAR(4) PRIMARY KEY,
        course_name CHAR(20) UNIQUE,
        credits INT CHECK (credits > 0)
    );
    
    -- 在sc表的课号列上建立外键约束fk_cno
    ALTER TABLE sc
    ADD CONSTRAINT fk_cno
    FOREIGN KEY (course_id)
    REFERENCES course(course_id)
    ON UPDATE CASCADE;
    
    -- 在stu表的姓名列上建立唯一约束uq_sname
    ALTER TABLE stu
    ADD CONSTRAINT uq_sname
    UNIQUE (sname);
    
    -- 创建测试表test
    CREATE TABLE test (
        date_time VARCHAR(50)
    );
    
    -- 创建触发器test_trig
    CREATE TRIGGER test_trig
    AFTER INSERT ON stu
    FOR EACH ROW
    BEGIN
        INSERT INTO test (date_time) VALUES (SYSDATE());
    END;
    
    -- 创建触发器del_trig
    CREATE TRIGGER del_trig
    BEFORE DELETE ON course
    FOR EACH ROW
    BEGIN
        DELETE FROM sc WHERE sc.course_id = OLD.course_id;
    END;
    
    -- 删除sc表的外键约束fk_cno、fk_sno
    ALTER TABLE sc
    DROP FOREIGN KEY fk_sno;
    
    -- 删除stu表的主键约束
    ALTER TABLE stu
    DROP PRIMARY KEY;
    
    -- 删除course表的唯一约束uq_cname
    ALTER TABLE course
    DROP INDEX uq_cname;
    

    【代码运行方式】: 您需要使用支持SQL的数据库管理系统,如MySQL、PostgreSQL或SQL Server。将上述代码复制到数据库管理工具的查询窗口中,然后执行。

    【代码预期运行结果】: 执行上述代码后,您将创建一个名为students的数据库,其中包含stusccourse三个表,以及相应的数据完整性约束和触发器。当您向stu表插入新记录时,test表将自动记录当前的日期和时间。当您从course表中删除一条记录时,相关的sc表记录也将被自动删除。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月12日

悬赏问题

  • ¥15 VESTA绘图原子颜色显示异常
  • ¥15 天翼云搭建多ip l2tp
  • ¥30 matlab求解刃位错方程
  • ¥15 python实现CAD识图
  • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果