2016-06-02 1 views
-1

ここで少しデータベース設計に関する質問があります。実際の問題が1回以上ヒットしたので、正しい方法についての意見や議論が必要です。データベース設計 - ルックアップテーブルを作成するための最小限のスペース

私は新しいゲームを発明しました。このゲームでは、10,20,30,40,50ペナルティのペナルティを受けることができます。ペナルティスコアに応じて、審判が何人に同意する必要があるかによって異なります。 10ペナルティの得点を得た場合、ただ1人の審判の「steve」が同意する必要があります.20人の場合、2人の審判の「steve」と「alan」が同意します。

どのようにこれをデータベーステーブルに配置すれば、どのレフリーと同意する必要があるかを調べることができます。

非理想的なソリューション: 私はこれで問題見出し

penScore | Ref1 | Ref2 | Ref3 | Ref4 | Ref5 
    10  steve 
    20  steve alan 
    30  steve alan scott 

を持っていることについて考えたが、それは厄介である空のセルの多くを残しています。

あなたはより良い解決策を考え出すことができますか?

+0

なぜペナルティを承認した審判の数を維持する小さなint型を保持していませんか? –

+1

何を避けようとしていますか?余分なスペース、または "messiness"? –

+2

「意見」と「ディスカッション」を求めるSOは、話題にはなりません。 – philipxy

答えて

1

空のセルは多くの領域を占有しません。使用しているデータベース製品によって異なりますが、そのほとんどは「ここには何もない」という非常に簡潔な表現方法があります。 「ここでは何も」を表す通常の方法は、SQL NULLです。

SQL NULLを含むセルでブール論理を開始すると、本当の混乱が始まります。 NULLSで論理演算を行うと、SQLの3つの論理に入ります。これは、通常の2つの価値のあるロジックと比較して、あまりにもわかりにくいものです。

概説したソリューションは正規化されていません。これは、データの処理内容に応じて問題が発生する場合と発生しない場合があります。

ベストプラクティスはありません。それは場合によって異なります。

0

単純明快なデザインは、次のとおりです。

--player PLAYER gets penalty score SCORE from referee REFEREE 
Penalty(player, score, referee) 
UNIQUE NOT NULL (player, score, referee) 
CHECK (score in (10, 20, 30, 40, 50)) 
関連する問題