1

私はデータベースの専門家ではないので、これは私のためには複雑ですが、多くの人にとってはそうではないかもしれません。私は、次のしている:データベース内の複雑な関係のための最良のスキーマ

quiz:多対多の関係テーブルプロジェクト - クイズ

team:いくつかのプロジェクト

project_has_quizが含まれています。表:いくつかのクイズ

projectが含まれている表表は、いくつかのチームが含まれています

event:いくつかのイベントが含まれているテーブル(プロジェクトには日付とその他のf ields)

event_has_team:多くの多の関係テーブル・イベント・チーム

さて、私はイベントでの各チームのクイズのための順序を割り当てる必要があります。たとえば:

は、あなたが5つのクイズabcdeを持っていると言います。

projectAプロジェクトを作成し、a,bおよびcのクイズで作成します。

次の2つのチームが持っている:あなたが作成し、イベントeventAprojectAとし、teamAteamBとあなたの関係をteamAteamB

を。

は今、私はteamAeventAがクイズの順序c, a, bを持っている必要があり、クイズの順序a, b, cteamBeventAを持たなければならないことをどこかに配置する必要があります。

これを行うにはどのような方法が最適ですか?プログラミングコードa, b, cc, a, bを介して挿入した列quizOrderで、event_has_team_has_quizOrder:私が持っている

最初のアイデアは、別のテーブルを構築することです。しかし、これを達成するための最も純粋な方法ではないと思うし、確かに非正規化の問題もある。

ありがとうございました。

答えて

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。私は待っていて、それ以外の場合はあなたの答えを正しいものに設定します。 –

関連する問題