Это делает то, что вы сказали, но я все еще не уверен на 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);