2016-04-23 3 views
0

Я создаю базу данных Access для хранения информации о студенческой стажировке. Проблема, с которой я сталкиваюсь, состоит в том, что у меня есть три таблицы, которые имеют одну и только одну связь с таблицей стажировки (Assignment, Supervisor Evaluation и Student Evaluation).Отдельные таблицы для отношений 1-1

Поскольку Access не позволяет таблице иметь более одного автоматически сгенерированного номера, я не могу позволить таблице интернатуры создать идентификационный номер для каждой из трех таблиц. Итак, я не уверен, как это сделать, когда мы вводим данные в эти формы таблиц, я могу назначить его специально для прохождения стажировки. Любой совет?

enter image description here

ответ

1

1-1 отношения всегда пахнут они должны быть объединены в одну таблицу. Это особенно важно, если они действительно 1-1 и не должны быть 1-0,1. В последнем случае, если изависимая информация может отсутствовать и в большинстве случаев будет отсутствовать, может быть полезно разделить ее на собственную таблицу. Но даже это можно выразить, указав значения null определенным атрибутам.

Теперь, если по какой-то причине вы настаиваете на этих четырех таблицах, для первичных ключей есть два пути. Один из них - для зависимых таблиц - не объявлять первичный ключ как автоматически генерируемый, а просто как число и назначать ему автогенерированное значение записи стажера. Другим является автоматическое создание первичного ключа для каждой из зависимых таблиц и наличие внешнего ключа в таблице Intership для каждого из них. Поскольку я считаю всю конструкцию этих зависимых таблиц излишне сложной, я не могу дать рекомендации, какой из этих способов выбрать.

Есть еще одна проблема, связанная с вашей моделью данных. В ваших таблицах есть такие атрибуты, как answer1, answer2, ... Теперь, если у вас есть небольшая фиксированная сумма этих атрибутов, это может быть хорошо. Но у вас может быть более широкий набор фиксированных вопросов, возможно, для каждого типа интернатуры, который может варьироваться динамически и не может просто выражаться фиксированной структурой столбцов? В этом случае вам нужно будет что-то вроде

Question(id, text) 
Internship(id, ...) 
Answer(id, internship_id, question_id, student_answer, supervisor_evaluation) 

Так что ваши кардинальность будет

Internship 1-----0,n Answer 0,n------1 Question 

То же самое для других деталей стажировки.

+0

Я, честно говоря, не против слияния их в один стол, но разве нет какого-то типа «правила», которое имеет такой большой стол? – Saverio

+0

См. Мой отредактированный ответ для этого. – TAM

+0

Все вопросы статичны. Они были те же самые более 5 лет. Тем не менее, я согласен с вами, я думаю, что есть лучший способ, чем то, что я сделал. Мое решение, о котором я подумал, делает назначениеId таким же, как internshipId, но не связывая их. Я просто использую поле со списком, чтобы выбрать интернатуру, и он будет вводить идентификатор в идентификатор назначения. – Saverio

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