Я не эксперт в области баз данных, поэтому это сложно для меня, но, возможно, это не для многих людей. У меня есть следующий:Лучшая схема для комплексного отношения в базе данных
quiz
: Таблица, которая содержит некоторые тесты
project
: Таблица, которая содержит некоторые проекты
project_has_quiz
: много-много таблиц отношения проекта-викторину
team
: Таблица, в которой содержит команды
event
: Таблица, которая содержит некоторые события (проект плюс дата и некоторые другие f ields)
event_has_team
: много-много табличного отношение событийных команды
Теперь я должен назначить порядок викторин для каждой команды в событии. Например:
Say у вас есть 5 викторин a
, b
, c
, d
, e
.
Вы создаете проект projectA
с викторинами a
, b
и c
.
У вас есть две команды: teamA
и teamB
Вы создаете и событие eventA
с projectA
и вы отношение его с teamA
и teamB
.
Теперь я должен поставить где-то eventA
с teamA
должны иметь порядок викторины a, b, c
и eventA
с teamB
должны иметь порядок викторины c, a, b
.
Каков наилучший способ для этого?
Первая мысль у меня есть, чтобы построить еще одну таблицу: event_has_team_has_quizOrder
, с колонкой quizOrder
вставив через программный код a, b, c
и c, a, b
. Но я не думаю, что это самый чистый способ достичь этого и что у этого наверняка есть проблемы денормализации.
спасибо.
Но не есть ли лучший способ? Я хочу сказать, что значения столбца 'event_has_team_has_quizOrder'' quiz' должны быть принудительно заданы базой данных в диапазоне, определенном значением столбца 'quiz' в проекте, связанном с событием. В вашем ответе, возможно, единственное возможное, я должен обеспечить с помощью программирования, что столбец 'quiz' никогда не является' d' или 'e'. Спасибо. –
Хороший вопрос. Нет текущей таблицы, в которую вы могли бы сделать (событие, викторину) внешний ключ. Надеюсь, кто-то более опытный приходит, чтобы предложить способы, которыми вы могли бы отказаться от использования контрольных ограничений/триггеров. – goat
Спасибо @chris.Я подожду, и в противном случае я верну свой ответ как правильный. –