2012-04-04 3 views
0

EDIT : 나의 수정 된 엔티티 관계 다이어그램 학생은 많은 접촉 시간을 가질 수 있지만 이는 현재 진행중인 과정과 관련이 없습니다. 그래서 tblContact의 courseID는 불필요했습니다. 그래서 tblStudent의 Primary 키를 사용하여 특정 교사가 과제를 표시 한 학년과 특정 학생이 그 TMA를 가지고있는 과정과 관련이있었습니다. 휴학생 추적 시스템을위한 데이터베이스 설계

http://i.imgur.com/cf3td.png

/편집

올드 ERD

ERD

StudID 및 CourseID 병합 된 복합 기본 키

내 질문 있습니다 참고 :이해야 나는 studi있다. tblContact의 D와 courseID? 또는 내가 StudID를 가지고 있어야합니까? 복합 기본 키를 사용하기 때문에 tblContact와 tblStudentTMA에 둘 다 값을 가져야한다고 생각했기 때문에? 이게 맞습니까?

답변

1

답변은 연락처가 코스와 관련이 있는지 여부에 달려 있습니다.

코스와 관련이있는 경우 연락처에서 코스를 식별 할 수있는 방법이 필요하지만 tblContact의 tblCourse 테이블에 연결할 수 있습니다.

많은 수의 테이블에 대한 선호는 예 StudentCourseIDIdentity 열에 별도의 기본 키를 사용하는 것으로 관련 테이블에 여러 개의 외래 키를 저장할 필요가 없습니다.

0

tblContact의 기본 키에는 최소한 두 개의 열이 있어야합니다. 그 중 하나는 StudID 여야합니다.

학생당 연락처를 두 개 이상 저장해야하기 때문에 최소한 두 개의 열이 있어야합니다. 접촉 행이 실제 학생을 가리키는 것을 보장하기 위해 기둥 중 하나가 StudID 여야합니다. 두 번째 열은 아마도 DateOfContact 여야합니다.

기본 키 {StudID, DateOfContact}를 사용하면 하루에 학생 한 명에게 연락 할 수 있습니다. 대신 {StudID, TimeOfContact}를 사용하는 경우 - 날짜 대신 타임 스탬프를 사용하십시오 - 하루에 학생 한 명당 하나 이상의 연락처를 가질 수 있습니다.

tblContact의 모든 행은 학생과 그 학생의 코스 중 하나를 참조해야하는 경우 CourseID를 기본 키에 포함해야합니다. tblContact (StudID, CourseID)에서 tblStudentCourse (StudID, CourseID)까지 외래 키 참조가 필요합니다.

tblContact의 모든 행에서 코스를 참조 할 필요가없는 경우 tblContact.CourseID는 Nullable이어야하며 기본 키의 일부가 아니어야합니다. 그러나 tblContact (StudID, CourseID)에서 tblStudentCourse (StudID, CourseID)까지 외래 키 참조가 있어야합니다.

+0

첫 번째 질문은 다음과 같습니다. 자녀가없는 테이블에서 기본 키가 필요 없다는 의견이있었습니다. 당신이 그들을 언급하지 않을 것이기 때문에, 당신은 첫 번째 문장이 생길 필요가 있습니까? – Apple

+0

모든 테이블에는 기본 키 또는 이와 동등한 것이 필요합니다. SQL 데이터베이스에서 열 'NOT NULL UNIQUE'을 선언하는 것은 'PRIMARY KEY'를 선언하는 것과 동일합니다. 키는 다른 테이블이 키를 참조하는지 여부와 관계없이 ID와 관련이 있습니다. 느슨하게 말해서 모든 SQL 테이블은 각 행을 식별 할 수있는 방법이 필요합니다. SQL 방식은 키를 사용합니다.(NOT NULL UNIQUE 또는 PRIMARY KEY 중 하나이다.) –

관련 문제