2012-04-04 3 views
0

EDIT: моя пересмотренная диаграмма отношений сущностей Студент может иметь много контактов, но это не касается того, на каком курсе они находятся. Таким образом, идентификатор курса в tblContact был ненужным, поэтому я использовал первичные ключи в tblStudent, относящиеся к классу для конкретного назначенного преподавателя, и курс, в котором учащийся участвовал с этим TMA. УфДизайн базы данных для системы отслеживания учащихся

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

/Edit

Моего Старого ERD

ERD

отмечает, что StudID и CourseID является объединенным соединением первичного ключа

Моим вопросом: Должна У меня есть studI D и courseID в tblContact? или я должен просто иметь StudID, потому что я использую составной первичный ключ. Я думал, что должен иметь оба значения в tblContact и tblStudentTMA? Правильно ли это?

ответ

1

Ответ зависит от того, связан ли контакт с курсом или нет.

Если это связано с курсом, вам необходимо каким-то образом идентифицировать Курс от контакта, но вы можете связать его с таблицей tblCourse от tblContact.

Мое предпочтение для таблицы многих-многих заключается в использовании отдельного первичного ключа в вашем примере StudentCourseID, который является столбцом Identity, что устраняет необходимость хранения нескольких внешних ключей в связанной таблице.

0

Первичный ключ в tblContact должен иметь не менее двух столбцов. Один из них должен быть StudID.

Он должен иметь как минимум две колонки, потому что вам нужно хранить более одного контакта для каждого учащегося. Один из столбцов должен быть StudID, чтобы гарантировать, что строка контакта относится к фактическому ученику. Второй столбец, вероятно, должен быть DateOfContact.

Первичный ключ {StudID, DateOfContact} позволяет одному контакту на каждого учащегося в день. Если вы вместо этого используете {StudID, TimeOfContact} - используйте временную метку вместо даты - вы можете иметь более одного контакта на каждого учащегося в день.

В дополнение к этому, если каждый строка в tblКонтакт должен касаться как ученика, так и одного из курсов этого учащегося, тогда вам, вероятно, следует включить CourseID в первичный ключ. Вам также нужна ссылка на внешний ключ от tblContact (StudID, CourseID) до tblStudentCourse (StudID, CourseID).

Если нет необходимости, чтобы каждая строка в tblContact ссылалась на курс, то tblContact.CourseID должен иметь значение NULL и не должен быть частью первичного ключа. Но вы все равно должны иметь ссылку на внешний ключ от tblContact (StudID, CourseID) до tblStudentCourse (StudID, CourseID).

+0

Первый вопрос: Мое мнение состояло в том, что вам не нужны первичные ключи в столах без детей. Потому что вы не обращались к ним, так вам нужно сначала придумать предложение? – Apple

+0

Для каждой таблицы требуется либо первичный ключ, либо его эквивалент. В базе данных SQL объявление столбца «NOT NULL UNIQUE» эквивалентно объявлению «PRIMARY KEY». Ключи связаны с идентификацией, а не с тем, ссылаются ли другие таблицы на ключи. Говоря кратко, каждая таблица SQL должна каким-то образом идентифицировать каждую строку. Путь SQL с ключом.(Либо «NOT NULL UNIQUE», либо «ПЕРВИЧНЫЙ КЛЮЧ».) –

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