大学数据库:表结构和模式概述
大学数据库是一个现代的 MariaDB 11.7+ 示例数据库,用于学习 SQL — 设计为经典 Sakila 数据库的功能丰富的替代品。
它涵盖了所有重要的 MariaDB 数据类型,包括 VECTOR(1536)、JSON、SET 和 FULLTEXT 索引,完全标准化到 3NF,并提供足够的数据供初学者练习和复杂的分析查询。
大学数据库包含 16 个主要表,描述大学的学术结构 — 系、教职员工、学生、课程、注册、研究项目等。
大学数据库的 ER 图
表列表
semesters - 学术学期表。
- semester_id唯一记录标识符 (PK, TINYINT)
- term学期类型:秋季、春季或夏季 (ENUM)
- academic_year学年 (YEAR)
- name学期名称 (例如 'Fall 2024')
- start_date学期的第一天
- end_date学期的最后一天
- enroll_deadline学生注册的最后日期
- is_active学期是否当前有效 (BOOLEAN)
| semester_id |
term |
academic_year |
name |
start_date |
end_date |
enroll_deadline |
is_active |
| 1 |
秋季 |
2024 |
2024 秋季 |
2024-09-02 |
2024-12-20 |
2024-09-13 |
1 |
- 主键,btree (semester_id)
- 唯一键 (term, academic_year)
rooms - 校园教室和实验室。
- room_id唯一记录标识符 (PK, SMALLINT)
- building建筑名称
- room_number房间号码或标签
- capacity最大座位数 (SMALLINT)
- room_type房间类型:讲座、研讨会、实验室、计算机实验室或在线 (ENUM)
- has_projector房间是否有投影仪 (BOOLEAN)
- has_video房间是否有视频会议设备 (BOOLEAN)
| room_id |
building |
room_number |
capacity |
room_type |
has_projector |
has_video |
| 1 |
科学大楼 |
101 |
120 |
讲座 |
1 |
0 |
- 主键,btree (room_id)
- 唯一键 (building, room_number)
scholarships - 可用奖学金和助学金。
- scholarship_id唯一记录标识符 (PK, SMALLINT)
- name奖学金名称
- amount奖励金额 (DECIMAL)
- frequency奖励频率:一次性、年度或每学期 (ENUM)
- eligibility资格标准作为 JSON — 例如
{"min_gpa": 3.5, "need_based": true}
- is_active奖学金是否当前提供 (BOOLEAN)
| scholarship_id |
name |
amount |
frequency |
eligibility |
is_active |
| 1 |
院长优秀奖 |
5000.00 |
年度 |
{"min_gpa": 3.8, "need_based": false, "majors": ["CS","Math"]} |
1 |
- 主键,btree (scholarship_id)
departments - 三层部门层级 (学院 → 部门 → 子部门)。
- department_id唯一记录标识符 (PK, TINYINT)
- parent_id父部门标识符 — 自引用外键 (可为空)
- code短部门代码 (CHAR)
- name部门名称
- level层级:1 = 学院,2 = 部门,3 = 子部门 (TINYINT)
- head_faculty_id部门负责人的标识符 (外键,可为空)
- established部门成立年份 (YEAR,可为空)
| department_id |
parent_id |
code |
name |
level |
head_faculty_id |
established |
| 1 |
[null] |
ENG |
工程学院 |
1 |
1 |
1965 |
- 主键,btree (department_id)
- 唯一键 (code)
- 外键 (parent_id) 参考 departments(department_id)
- 外键 (head_faculty_id) 参考 faculty(faculty_id)
faculty - 学术和行政人员。
- faculty_id唯一记录标识符 (PK, SMALLINT)
- department_id部门标识符 (外键)
- first_name教职员工的名字
- last_name教职员工的姓氏
- email机构电子邮件地址
- phone办公室电话号码 (可为空)
- rank学术职称:讲师、助理教授、副教授、教授或名誉教授 (ENUM)
- hire_date入职日期
- office办公室房间号码或位置 (可为空)
- office_hours每周办公时间作为 JSON 数组 — 例如
[{"day":"Mon","start":"10:00","end":"12:00"}]
- bio个人简介文本 (TEXT, 可为空)
- is_active教职员工是否当前有效 (BOOLEAN)
| faculty_id |
department_id |
first_name |
last_name |
email |
phone |
rank |
hire_date |
office |
office_hours |
bio |
is_active |
| 1 |
3 |
Alice |
Carter |
a.carter@university.edu |
+15550100 |
教授 |
2010-08-15 |
ENG-204 |
[{"day":"Mon","start":"10:00","end":"12:00"}] |
分布式系统专家。 |
1 |
- 主键,btree (faculty_id)
- 唯一键 (email)
- 外键 (department_id) 参考 departments(department_id)
students - 注册学生。
- student_id唯一记录标识符 (PK, INT)
- department_id所属部门标识符 (外键)
- student_number唯一学生 ID 号码 (CHAR, 例如 'S000123')
- first_name学生的名字
- last_name学生的姓氏
- email学生的电子邮件地址
- date_of_birth学生的出生日期
- gender性别:M、F、NB、其他或不愿透露 (ENUM, 可为空)
- enrollment_date学生首次注册的日期
- expected_grad预计毕业年份 (YEAR, 可为空)
- status注册状态:有效、无效、已毕业、暂停或退学 (ENUM)
- gpa累计 GPA 0.000–4.000,由触发器维护 (DECIMAL, 可为空)
- contacts紧急联系人和地址作为 JSON — 例如
{"emergency":{"name":"Jane Doe","phone":"+1-555-0100"}}
| student_id |
department_id |
student_number |
first_name |
last_name |
email |
date_of_birth |
gender |
enrollment_date |
expected_grad |
status |
gpa |
contacts |
| 1 |
3 |
S000123 |
James |
Miller |
j.miller@student.edu |
2002-04-23 |
M |
2021-09-01 |
2025
|