【学生信息表】

【宿舍信息表】

【宿舍分配表】

为了相互关联,我们需要在表中添加外键。在宿舍分配表中添加用于关联学生信息表的外键 student_id,以及用于关联宿舍信息表的外键 dormitory_id;
- -- 创建学生信息表
- CREATE TABLE students(
- id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生ID',
- name VARCHAR(30) NOT NULL COMMENT '学生姓名',
- student_number VARCHAR(20) NOT NULL COMMENT '学号',
- gender VARCHAR(2) NOT NULL COMMENT '学生性别',
- grade VARCHAR(4) NOT NULL COMMENT '年级',
- major VARCHAR(30) NOT NULL COMMENT '专业',
- phone_number VARCHAR(20) DEFAULT NULL COMMENT '联系方式'
- );
-
-
- -- 创建宿舍信息表
- CREATE TABLE `dormitories` (
- `id` INT NOT NULL AUTO_INCREMENT COMMENT '宿舍ID',
- `building` VARCHAR(20) NOT NULL COMMENT '所属的楼栋',
- `room_number` VARCHAR(20) NOT NULL COMMENT '房间号',
- `capacity` INT NOT NULL COMMENT '容纳人数',
- PRIMARY KEY (`id`)
- ) COMMENT='宿舍信息表';
-
-
- -- 创建宿舍分配表
- CREATE TABLE dormitory_assignments(
- id INT PRIMARY KEY AUTO_INCREMENT COMMENT '分配记录ID',
- student_id INT NOT NULL COMMENT '学生ID',
- dormitory_id INT NOT NULL COMMENT '宿舍ID',
- grade VARCHAR(4) NOT NULL COMMENT '年级',
- major VARCHAR(30) NOT NULL COMMENT '专业',
- check_in_time DATETIME DEFAULT NULL COMMENT '入住时间',
- check_out_time DATETIME DEFAULT NULL COMMENT '退房时间',
- FOREIGN KEY (student_id) REFERENCES students(id),
- FOREIGN KEY (dormitory_id) REFERENCES dormitories(id)
- );
-
-
【学生信息表】
插入一条学生信息,学号为 20230001,姓名为 张三,性别为 男,年级为 2,专业为 计算机科学与技术,联系方式为 13412345678:
-
- INSERT INTO students (name, student_number, gender, grade, major, phone_number)
- VALUES ('张三', '20230001', '男', '2', '计算机科学与技术', '13412345678');
【宿舍信息表】
插入一条宿舍信息,楼栋为 2 号楼,房间号为 101,容纳人数为 2:
- INSERT INTO dormitories (building, room_number, capacity)
- VALUES ('2 号楼', '101', 2);
【宿舍分配表】
插入一条宿舍分配记录,学生 ID 为 1,宿舍 ID 为 1,年级为 2,专业为 计算机科学与技术,入住时间为 2023-09-01,退房时间为 2024-02-28:
- INSERT INTO dormitory_assignments (student_id, dormitory_id, grade, major, check_in_time, check_out_time)
- VALUES (1, 1, '2', '计算机科学与技术', '2023-09-01', '2024-02-28');
在进行宿舍分配时,如果发现目标宿舍已经达到了容纳人数上限,则应该停止当前的分配操作,不再继续分配该宿舍。
- % 连接 MySQL 数据库
- conn = database(database_name, user_name, password, 'com.mysql.cj.jdbc.Driver', url);
-
- % 查询宿舍的容纳人数和当前入住人数
- sql_query = ['SELECT da.capacity, COUNT(*) FROM dormitory_assignments AS da '...
- 'WHERE da.dormitory_id = ' num2str(dormitory_id) ' GROUP BY da.dormitory_id;'];
- results = exec(conn, sql_query);
-
-
- % 读取查询结果
- results = fetch(results);
- current_number = results.Data{1,2};
- capacity = results.Data{1,1};
-
-
- % 判断宿舍是否已满
- if current_number >= capacity
- disp('该宿舍已经满员,无法分配!');
- return;
- end