sql - 表示数据库中的时间表

标签 sql mysql database-design timetable

我想在 mysql 数据库上表示一个时间表。 我的想法是我应该有三个表:

  1. classdetails 表 - 包含类(class)容量、教室名称等。
  2. class_sessions 表,其中包含: session 的开始时间和结束时间,
  3. class_unit 表,其中包含:类(class)名称(MAT003. 等)

class_sessions 表和 class_unit 表中也会有适当的外键。

最终我希望能够查询一个“免费”类(在运行查询时目前没有类)并返回其名称,例如(Room 5b)

我列出的表足以满足当前的查询吗?

任何如何使其变得更好的想法将不胜感激。

最佳答案

这符合你所说的,但我仍然不能 100% 确信你所说的是你想要的。 :-)

CREATE TABLE rooms (
  room_num VARCHAR(10) NOT NULL PRIMARY KEY
);

INSERT INTO rooms VALUES 
  ('5B'),
  ('5C'),
  ('5D');

CREATE TABLE class_rooms (
  class VARCHAR(15) NOT NULL,
  room_num VARCHAR(10) NOT NULL,
  CONSTRAINT room_nm_fm_rooms FOREIGN KEY (room_num) REFERENCES rooms(room_num),
  PRIMARY KEY (class, room_num)
);

INSERT INTO class_rooms VALUES 
  ('Algebra', '5B'),
  ('Calculus','5C'),
  ('Discrete Math', '5C');

完成此操作后,获取未使用的房间号的一种方法是使用 SELECT...WHERE...NOT IN 进行查询。这可能不是最快的,但根据我的经验,这是最容易理解的语法。

SELECT room_num 
FROM rooms 
WHERE room_num NOT IN (SELECT room_num FROM class_rooms);

关于sql - 表示数据库中的时间表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815404/

相关文章:

sql - 如果您在 ColdFusion 中有两个具有相同设置的不同数据源连接,它们是否共享同一个池?

sql - 如何在 PostgreSQL 中对整数和文本的组合进行排序?

mysql - 如何在sql中以第三乘法顺序选择表的行,如3、6、9等

mysql - 如何正确存储两个用户之间的聊天记录

mysql - 使用外键 - 无法插入

mysql - 尝试在 MySQL 子查询中选择唯一结果时出现问题

PHP在mysql数据库中插入文件

mysql - 删除/更新表记录的时间/创建日期有什么好处?

mongodb - mongo 中的规范化与非规范化数据

mysql - 群组通知系统数据库设计