2009-08-19 5 views
2

Ich habe ein ziemlich häufiges Szenario, in dem ein Benutzer aus einer Reihe von Attributen auswählen kann. Die Attribute in der Benutzeroberfläche werden durch Kontrollkästchen dargestellt.Modellierung von Ja/Nein-Attributen in der Datenbank

Zum Beispiel:

Komponenten: Festplatte (y/n), die CPU (y/n), Monitor (y/n), Tastatur (y/n), etc ....

in der Vergangenheit habe ich in der Regel dieses Szenario wie folgt modelliere:

"PCs" 1:M "PC Components" M:1 "Components" 

Eine weitere Option ist die „Attribute“ als y/n Felder in dem „PC“ Tisch zu machen.

z.B.

In der Vergangenheit basiert mein Grundprinzip dafür, ob man mit einem oder dem anderen gehen kann, darauf, ob der Benutzer neue Attribute eingeben kann. Wenn die Antwort ja ist, dann gehe ich mit der ersten Option, wenn die Antwort nein ist, dann gehe ich normalerweise mit y/n-Attributen.

Aber jetzt habe ich ein Szenario, wo es etwa 20 Attribute in mehrere Kategorien unterteilt sind. Nach dem Erstellen der ERD sieht es einfach "falsch" aus und die Tabelle hat eine absurde Anzahl von Spalten.

Meine Frage ist, gibt es eine Standard/korrekte Möglichkeit, dies zu modellieren? Wenn ja, hat es einen Namen?

Antwort

2

Man ist versucht, ein "kompakteres" Datenmodell (etwas anderes als eine Spalte pro Attribut) zu entwerfen, weil die Attribute kompatible Datentypen haben (sie sind alle y/n).

Wenn die Attribute jeweils unterschiedliche Datentypen hatten, z. B. wenn sie auf eine Gruppe von Werten mit unterschiedlichen Nachschlagetabellen beschränkt waren, wäre es ein Kinderspiel, eine Spalte pro Attribut zu verwenden.

Siehe Domain-Key Normal Form. Das Modellieren Ihrer y/n-Attribute als Zeilen bedeutet, dass es keine Möglichkeit gibt, obligatorische Attribute darzustellen (für die Sie müssen entweder Y oder N-Wert haben). Sie hätten also eine Einschränkung, dass es für N Attribute N Zeilen geben muss. Eine Einschränkung für die Mindestanzahl von Zeilen ist weder eine Domänenbeschränkung noch eine Schlüsseleinschränkung, daher schlägt der DKNF-Test fehl.

Es ist nicht notwendig, dass jede Tabelle DKNF entsprechen muss, aber wenn Sie fragen, welcher Begriff den Entwurf einer Spalte pro Attribut beschreibt, schlage ich vor, dass "Domain/Key Normal Form" passen würde.

+0

Thx für die Antwort. Was würdest du vorschlagen, wenn ich ungefähr 50 dieser Attribute habe? Halten Sie sie auf dem gleichen Tisch? Die Tabelle wird dann insgesamt ungefähr 100 Attribute haben. Oder zu 1-1 wechseln? –

+1

Ich empfehle, die Datenbank nach den Regeln der Normalisierung zu modellieren, es sei denn und bis es zu einem messbaren Leistungsengpass wird. –

+0

Es ist einer dieser "Design-Gerüche", wenn ich diese vielen Spalten sehe, aber die Daten sind normalisiert. Danke EPA für all diese Attribute. –

1

Ich folge dieser einfachen Regel: Ein Stück Daten pro Spalte. Lassen Sie die Datenbank die Speicherstruktur optimieren.

In der SQL Server-Welt gehe ich daher mit dem BIT-Datentyp und ja, separate Spalten. Andere Datenbanken, ich bin sicher, haben einen entsprechenden Typ.

Verwandte Themen