在成绩表和学生表设置参照完整性 当成绩表有某个条形码的记录,就不能删除学生表中相关的记录,也不能修改学生表中相关学生的学号。
时间: 2024-10-25 17:13:40 浏览: 19
在数据库设计中,为了维护数据的一致性和完整性,通常会通过设置参照完整性规则来关联两个表,比如成绩表(ScoreTable)和学生表(StudentTable)。具体步骤如下:
1. **外键约束**:在学生表(StudentTable)中,将学生的学号(StudentID)设置为成绩表的外键。这意味着每个成绩对应一个学生,学号字段引用了学生表中的主键。
```
ALTER TABLE ScoreTable
ADD CONSTRAINT fk_StudentID FOREIGN KEY (StudentID)
REFERENCES StudentTable(StudentID);
```
2. **级联操作**:当设置参照完整性时,可以配置级联操作,例如 `RESTRICT`、`CASCADE`、`NO ACTION` 等。默认通常是 `RESTRICT`,即不允许删除学生表中相关的学生,因为这会导致成绩表中失去对应的记录。如果希望删除学生记录时同时删除其所有成绩,可以设置为 `CASCADE`。
```
ALTER TABLE ScoreTable
DROP CONSTRAINT fk_StudentID
-- 或者修改为 CASCADE 删除
ALTER TABLE ScoreTable
MODIFY CONSTRAINT fk_StudentID ACTION CASCADE;
```
相关问题
(5)添加表级约束外键,要求使学生成绩表的学号列参照学生表的学号列,利用参照完整性实现。,代码输出来
在SQL中,为了在学生成绩表(假设名为`grades`)上添加表级约束外键,使其参考学生表(假设名为`sudents`)的学号列,你可以使用下面的ALTER TABLE语句来创建一个外键约束。这里以MySQL为例:
```sql
ALTER TABLE grades
ADD CONSTRAINT fk_student_id
FOREIGN KEY (student_id)
REFERENCES students(student_id)
ON DELETE CASCADE ON UPDATE CASCADE;
```
在这段代码中:
- `fk_student_id` 是外键约束的名称,可以根据需要自定义。
- `student_id` 是你想引用的学生表中的学号字段。
- `REFERENCES students(student_id)` 指定外键引用的是学生表的哪个字段。
- `ON DELETE CASCADE` 如果删除了学生表中的记录,那么成绩表中相应的记录也会自动删除。
- `ON UPDATE CASCADE` 如果更新了学生表中的记录,那么成绩表中对应的记录也会相应更新。
为学生信息表Student-info\成绩信息表SC-info和课程信息表Course-info创建参照完整性:级联删除和级联修改触发器
你可以使用以下SQL语句为表Student-info、SC-info和Course-info创建参照完整性:
1. 为Student-info表添加外键参照完整性,当学生记录被删除时,级联删除SC-info表中相关学生的成绩记录。
```sql
ALTER TABLE SC-info ADD CONSTRAINT fk_sc_info_student
FOREIGN KEY (sid) REFERENCES Student-info(sid)
ON DELETE CASCADE;
```
2. 为Course-info表添加外键参照完整性,当课程记录被删除时,级联删除SC-info表中相关课程的成绩记录。
```sql
ALTER TABLE SC-info ADD CONSTRAINT fk_sc_info_course
FOREIGN KEY (cid) REFERENCES Course-info(cid)
ON DELETE CASCADE;
```
3. 为Student-info表添加外键参照完整性,当学生记录的班级信息被修改时,级联修改SC-info表中相关学生的班级信息。
```sql
CREATE TRIGGER trig_student_info_class_update
AFTER UPDATE ON Student-info
FOR EACH ROW
BEGIN
IF NEW.class <> OLD.class THEN
UPDATE SC-info SET class = NEW.class WHERE sid = NEW.sid;
END IF;
END;
```
4. 为Course-info表添加外键参照完整性,当课程记录的学分信息被修改时,级联修改SC-info表中相关课程的学分信息。
```sql
CREATE TRIGGER trig_course_info_credit_update
AFTER UPDATE ON Course-info
FOR EACH ROW
BEGIN
IF NEW.credit <> OLD.credit THEN
UPDATE SC-info SET credit = NEW.credit WHERE cid = NEW.cid;
END IF;
END;
```
需要注意的是,这些参照完整性和触发器只是示例,适用于一些简单的情况。在实际应用中,你可能需要根据具体的业务需求和数据模型设计更加复杂的参照完整性和触发器逻辑。
阅读全文