2015-05-28 2 views
0

Что является лучшей практикой для создания внешнего ключа из упомянутого дву- возможности 1:лучшая практика для иностранных ключевых отношений

table1: пользователь (номер, имя, пароль) table2: экзамены (идентификатор, имя) таблица 3: user_exam (это, идентификатор_пользователя, exam_id)

возможность 2:

Table1: экзамены (номер, имя) таблица2: пользователь (номер, имя, пароль, exam_id)

+0

Я предполагаю, что первый из них, поскольку я чувствую, что один пользователь может быть связан с несколькими экзаменами .. пользователь has_many экзамены, в этом случае вы не можете сделать со вторым ... и если это не так, тогда вы может иметь вторую таблицу, где пользователь имеет свой экзамен. – argentum47

ответ

0

Ваш вопрос больше похож на вопрос, основанный на мнениях, но насколько я знаю, внешние ключи должны находиться в таблице соединений. Таким образом, Возможность 1 - идеальный подход для использования внешнего ключа.

+0

спасибо Рахул :) Могу ли я знать, что может быть причиной возможности 1 быть идеальным подходом? –

+0

@priyanka: 1. Таблица (user_exam) может быть полезна, когда вы хотите получить только идентификаторы из двух таблиц (* возможно, в каком-либо приложении *). 2. Было бы полезно, если бы у пользователя было много экзаменов, как указано в argentum. 3. Ссылочную целостность следует обрабатывать на минимально возможном уровне. –

+0

@priyankachordiya: - И если мое предположение не так, тогда этот вопрос очень связан с http://stackoverflow.com/questions/29217781/hi-i-am-having-the-query-with-database, который у вас есть спросил. Итак, лучшее объяснение возможности 1 находится в вашем вопросе;) –

1

Основываясь на том, что вы моделируете, я бы предположил, что у вас есть отношения «многие ко многим» между экзаменами и пользователями. Другими словами, у вас есть экзамены без пользователей и пользователей без экзаменов. В этом случае модель 2 вообще не работает.

В модели 2 каждый пользователь получит только один идентификатор, или вам потребуется записывать записи многопользовательских пользователей каждый раз, когда будет добавлен экзамен для тема. Это увеличивает вероятность проблем с целостностью данных, поскольку пароль существует. Даже не рассматривайте использование модели 2, если вы не можете гарантировать, что никогда не будет необходимости в более чем одном экзамене.

В зависимости от типа экзаменов вы говорите о таблице user_exams, вероятно, должны включать дополнительную информацию, такую ​​как дата. Что еще вам может понадобиться, зависит от значения данных, которые вы моделируете.

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