2016-06-02 8 views
-1

habe ein wenig Datenbank-Design-Frage hier - Ich möchte Meinungen und Diskussionen über die richtige Art und Weise zu gehen, da das eigentliche Problem ist ein, das ich mehr als einmal getroffen habe.Datenbank-Design - am wenigsten Platz für eine Lookup-Tabelle

Also habe ich ein neues Spiel erfunden. In diesem Spiel können Sie eine Strafe von 10, 20, 30, 40, 50 Strafpunkten erhalten. Abhängig vom Punktestand hängt es von der Anzahl der Schiedsrichter ab. Wenn Sie also einen Strafpunkt von 10 Punkten erhalten, muss nur 1 Schiedsrichter 'steve' zustimmen, wenn 20, 2 'steve' und 'alan' zustimmen.

Wie kann dies in einer Datenbanktabelle angeordnet werden, damit ich nachschlagen kann, welche Schiedsrichter und wie viele zustimmen müssen?

einer nicht idealen Lösung: Ich dachte über die Überschriften mit

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

Das Problem dabei ist, es viele leere Zellen verlässt, die chaotisch ist.

Können Sie eine bessere Lösung finden?

+0

warum nicht nur ein winziges int behalten, dass die Anzahl der Schiedsrichter halten, dass die Strafe zugelassen? –

+1

Was möchten Sie vermeiden? Zu viel Platz oder "Unordnung"? –

+2

In SO suchen "Meinungen" und "Diskussion" ist Off-Topic. – philipxy

Antwort

1

Leere Zellen nehmen nicht viel Platz in Anspruch. Es hängt davon ab, welches Datenbankprodukt Sie verwenden, aber die meisten von ihnen haben eine sehr prägnante Art, "nichts hier" auszudrücken. Die übliche Art, "nichts hier" darzustellen, ist SQL NULL.

Das eigentliche Durcheinander beginnt, wenn Sie Boolesche Logik für Zellen starten, die SQL NULL enthalten. Wenn Sie in logische Operationen mit NULLS kommen, gelangen Sie in die dreiwertige Logik von SQL. Dies ist wirklich obskures Zeug im Vergleich zu gewöhnlichen zweiwertigen Logik.

Die von Ihnen umrissene Lösung ist nicht normalisiert. Je nachdem, was Sie mit den Daten machen werden, kann dies zu Problemen führen.

Es gibt keine beste Praxis. Es kommt auf den Fall an.

0

Der einfache Aufbau ist:

--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))