1

Я не эксперт в области баз данных, поэтому это сложно для меня, но, возможно, это не для многих людей. У меня есть следующий:Лучшая схема для комплексного отношения в базе данных

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. Но я не думаю, что это самый чистый способ достичь этого и что у этого наверняка есть проблемы денормализации.

спасибо.

ответ

1

вы могли бы сделать

event_has_team_has_quizOrder

(event, team, quiz, sequence) 


eventA, teamA, a, 1 
eventA, teamA, b, 2 
eventA, teamA, c, 3 
eventA, teamB, c, 1 
eventA, teamB, a, 2 
eventA, teamB, b, 3 
+0

Но не есть ли лучший способ? Я хочу сказать, что значения столбца 'event_has_team_has_quizOrder'' quiz' должны быть принудительно заданы базой данных в диапазоне, определенном значением столбца 'quiz' в проекте, связанном с событием. В вашем ответе, возможно, единственное возможное, я должен обеспечить с помощью программирования, что столбец 'quiz' никогда не является' d' или 'e'. Спасибо. –

+0

Хороший вопрос. Нет текущей таблицы, в которую вы могли бы сделать (событие, викторину) внешний ключ. Надеюсь, кто-то более опытный приходит, чтобы предложить способы, которыми вы могли бы отказаться от использования контрольных ограничений/триггеров. – goat

+0

Спасибо @chris.Я подожду, и в противном случае я верну свой ответ как правильный. –

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