2013-11-25 2 views
0

Я делаю проект с использованием J2EE (сервлета) для создания таблицы времени в колледже. Есть шесть слотов (6 часов) в деньСоздание базы данных для создания таблицы времени

4 x 1 HR Lectures 
    1 x 2 HR Lab 

Там три партии (3ИТ, 5It, 7IT)

2 Classroom 
    1 LAB 

Каждый слот в таблице времени будет иметь

 (Subject,Faculty) 

Для лаборатории я дублирую слот. Таблицы

Subject(SubjectID INT, SubjectName VARCHAR); 
    Faculty(FacultyID INT,FacultyName VARCHAR,NumOfSub INT,Subjects XYZ); 

Здесь я не в состоянии решить DATATYPE для субъекта. Что мне делать ? Поскольку преподаватель может преподавать несколько предметов? Также как связаться с Тематической таблицей?

P.S. Использование базы данных MySQL

ответ

0

Вы не хотите, чтобы на самом деле хранить либо NumOfSub (количество предметов) ИЛИSubjects в Faculty. Хранение предметов таким образом является нарушением First Normal Form, и дело с ним вызовет майор головные боли.
Вместо того, что вы хотите еще одна таблица:

FacultySubject 
---------------- 
FacultyId -- fk for Faculty.FacultyId 
SubjectId -- fk for Subject.SubjectId 

Исходя из этого, вы можете легко получить количество предметов, или набор строк с перечислением предметов (я считаю, MySQL также имеет функции, чтобы вернуть список значения, но у меня нет опыта работы с теми):
Этот запрос будет извлекать количество предметов, преподаваемых конкретного учителя:

SELECT Faculty.FacultyId, COUNT(*) 
FROM Faculty 
JOIN FacultySubject 
    ON FacultySubject.FacultyId = FacultyId.FacultyId 
WHERE Faculty.FacultyName = 'Really Cool Professor' 
GROUP BY Faculty.FacultyId 

... и этот запрос получит все испытуемые (названный), что они учить:

SELECT Subject.SubjectId, Subject.SubjectName 
FROM Faculty 
JOIN FacultySubject 
    ON FacultySubject.FacultyId = FacultyId.FacultyId 
JOIN Subject 
    ON Subject.SubjectId = FacultySubject.SubjectId 
WHERE Faculty.FacultyName = 'Really Cool Professor' 

(обратите внимание, что этот последний возвращается в предметы в виде набора строк, то есть:

SubjectId SubjectName 
========================= 
1   Tree Houses 
2   Annoying Younger Sisters 
3   Swimming Holes 
4   Fishing 

)

+0

Тогда субъект FacultySubject таблица будет содержать данные, как это право ?? IT101 ABC IT102 ABC – fz8975

+0

Нет - он будет содержать ссылки fk только на существующие идентификаторы, которые вы указали как целые; он будет полностью непрозрачным, что-то вроде '1 1, 2 3, 88 1'. Чтобы получить фактические данные «отображения» (поскольку внутренние идентификаторы базы данных должны редко или никогда не выполняться), вам нужно будет присоединиться к другим таблицам. Предполагается, что 'IT101' находится в' Subject', а 'ABC' находится в' Faculty'. –

+0

ТНХ теперь получили его '' CREATE TABLE 'facsub' ( ' fid' INT (11) NOT NULL, ' sid' INT (11) NOT NULL, KEY' fid_idx' ('fid'), KEY' sid_idx '(' sid'), CONSTRAINT 'sid' FOREIGN KEY (' sid') ССЫЛКИ 'subject' (' sid') ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ НА ОБНОВЛЕНИИ НЕТ ДЕЙСТВИЙ, CONSTRAINT 'fid' FOREIGN KEY (' fid') ССЫЛКИ 'faculty' (' fid') ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЙ ) ENGINE = InnoDB DEFAULT CHARSET = latin1; '' это 'create' sql query foe = r' FacultySubject', 'fid' и' 'sid' являются FacultyID и StudentID – fz8975

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