2013-11-25 2 views
0

저는 시간 테이블 생성을위한 J2EE (서블릿)를 사용하여 프로젝트를 수행하고 있습니다. 하루에 여섯 개 슬롯 (6 시간)이 있습니다시간 테이블 생성을위한 데이터베이스 설계

4 x 1 HR Lectures 
    1 x 2 HR Lab 

시간 테이블의 각 슬롯해야합니다 세 가지 배치 (3IT, 5IT, 7IT)

2 Classroom 
    1 LAB 

이 있습니까

 (Subject,Faculty) 

실습용으로 슬롯을 복제합니다. 테이블

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

여기에 나는 주제에 대한 DATATYPE을 결정할 수 없습니다입니다. 어떻게해야합니까? 교수는 여러 과목을 가르 칠 수 있기 때문에? 또한 제목 표와 연결하는 방법?

P. 당신은 실제로 하나 NumOfSub (과목 수)를 저장하지 않으 또는 Faculty에서Subjects를 MySQL 데이터베이스

답변

0

사용. 그런 식으로 대상을 저장하는 것은 First Normal Form의 위반이며,이를 처리하면 두통이 발생합니다.
대신에, 당신이 원하는 것은 다른 테이블이에서

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

, 당신은 쉽게 과목의 수, 또는 주제를 나열하는 행 세트를 얻을 수 있습니다 (I는 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

아니요 - 정수라고 표시된 기존 ID에 대한 fk 링크 만 보유합니다. '1 1, 2 3, 88 1'과 같이 완전히 불투명 해집니다. 실제 '디스플레이'데이터를 얻으려면 (내부 데이터베이스 ID가 거의/거의 벗어날 수 없어야하므로) 다른 테이블에 조인해야합니다. 하나는 'IT101'이 '과목'이고 'ABC'가 '교수'라고 가정한다. –

+0

들으 지금은''( 'fid' INT (11) NULL NOT, 'sid'의 INT (11) NULL NOT TABLE'facsub'을 만들 수있어, KEY'fid_idx' ('fid'), KEY'sid_idx FORSTIGN KEY ('sid') CONFRAINT'fid' 외부 키 ('fid') 참조''('sid') '교수 '('fid') 업데이트 시도에 대한 아무런 조치도 취하지 말 것. NO 액션 ) ENGINE = InnoDB DEFAULT CHARSET = latin1; '''create' sql 쿼리입니다 foe = r'FacultySubject','fid',''sid'는 FacultyID와 StudentID입니다 – fz8975