SQL建表与存储过程示例:职工与部门关系及成绩统计

5星 · 超过95%的资源 9 下载量 4 浏览量 更新于2024-08-29 1 收藏 180KB PDF 举报
本资源主要涉及SQL数据库设计和存储过程的相关知识,包括关系模式的定义与完整性约束,以及学生-课程数据库的存储过程设计。 首先,关于关系模式的定义与完整性约束: 1. **关系模式**:题目给出了两个关系模式,分别是职工(Staff)和部门(Dept)。职工模式(Staff)包含职工号(Sno)、姓名(Sname)、年龄(Sage)、职务(Post)、工资(Pay)和部门号(Dno),其中职工号为主码。部门模式(Dept)包含部门号(Dno)、名称(Dname)、经理名(Mname)和电话(Tel),同样部门号为主码。 - 主码(Primary Key):职工表的职工号和部门表的部门号被定义为主键,用于唯一标识记录。 - 参照完整性(Referential Integrity):在Staff表中,通过`FOREIGN KEY(Dno)`约束,确保职工的部门号(Dno)引用了存在的部门表(Dept)的部门号,防止无效引用。 - 完整性约束条件(Constraint):`CONSTRAINT C1 CHECK (Sage <= 60)`,这个约束限制了职工的年龄不能超过60岁。 接着,是关于学生-课程数据库的存储过程设计: **存储过程**:题目要求编写一个名为`Stats`的存储过程,用于统计学生-课程数据库(SCC表)中离散数学成绩的分布情况。SCC表包含成绩等级(Grades)和对应人数(Num)。初始时,已设置了5个分数段([0~20),[20~40),[40~60),[60~80),[80~100])及对应的初始人数为0。 存储过程的`IF EXISTS`语句用于检查`sys.objects`系统视图中是否已经存在名为`Stats`的存储过程,如果不存在,则继续定义存储过程的逻辑。具体操作可能包括查询SC表中的成绩数据,根据成绩范围将学生分组,然后更新SCC表中的对应计数。这涉及SQL的聚合函数如COUNT(),GROUP BY语句,以及对已有数据的增删改查操作。 这个资源涵盖了数据库基础结构设计、主键和外键的定义,以及如何使用SQL存储过程来处理数据统计分析,对于理解SQL数据库管理和编程实践非常有帮助。