2011-01-27 2 views
0

Я хочу представить расписание в базе данных mysql. у меня была идея, что я должен иметь три таблицы:Представление расписания в базе данных

  1. classdetails стол - содержащий класс мощности, имя в классе и т.д.
  2. class_sessions стол с: start_time и END_TIME сессии,
  3. class_unit таблица: название курса (. MAT003 et.c)

там будет также соответствующие внешние ключи в class_sessions таблицы и class_unit таблицы.

В конце концов, я хочу, чтобы иметь возможность запросить для «свободного» класса (тот, который не имеет класса в настоящее время, в то время забега запроса) и возвращает его имя, например, (номер 5b)

Будут ли перечисленные таблицы достаточными для запроса?

Любые идеи, как сделать это лучше, будут оценены.

+1

Свободный класс - это класс, который не имеет класса? Вместо того, чтобы думать о таблицах, подумайте о тех фактах, которые вы знаете о классах. Предполагая колледж, подумайте в терминах «Каталог колледжа предлагает Algebra 101 весной 2011 года». «Профессор Смит научит Алгебра 101 весной 2011 года». «Алгебра 101 (Смит) встречается в понедельник, среду, пятницу с 9:00 до 11:00 весной 2011 года». «Алгебра 101 (Смит) на весну 2011 года встретится в комнате 5b». Когда вы можете выразить факты, таблицы будут писать сами. –

+0

Спасибо, Catcall. Ниже приведена попытка выразить факты, когда я их вижу: – watkib

+0

Взяв пример математики и комнаты, в комнате 5b есть алгебра, в комнате 5c есть исчисление, в комнате 5c есть дискретный Math, в комнате 5d нет класса, я хочу сделать запрос, который возвращает номер 5d. – watkib

ответ

1

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

Спасибо, Catcall, я думаю, что это то, что я ищу. Позвольте мне попробовать это. Я сообщу вам, если это сработает. – watkib

Смежные вопросы