umbenennen Warum nicht einfach NULL
verwenden, um "n/a" zu bedeuten?
Verwenden Sie andernfalls TINYINT
mit einer Nachschlagetabelle mit den Werten 0, 1 und 2 (oder vielleicht 1, 2 und 3) und deren Bedeutung. Dann fügen Sie einen FK zwischen den beiden Tabellen hinzu, um zu erzwingen, dass nur diese Werte eingegeben werden.
Die letzte Wahl wäre, mit einer CHAR(1)
Spalte zu gehen. Dies wäre in Ordnung nur wenn Sie auch eine binäre Sortierung angegeben, wie Latin1_General_100_BIN2
. Die binäre Sortierung macht es so, dass Sie die Leistung gegenüber den anderen beiden Optionen nicht verlieren. Ohne die binäre Sortierung vergleicht die Zeichenkettenspalte Werte mit linguistischen Regeln, die zusätzliche Zeit benötigen, aber für diese Verwendung keine Bedeutung haben. Sie benötigen auch einen AFTER INSERT, UPDATE
Trigger zu ersten UPPER()
diesen Wert für die Konsistenz und dann erzwingen, dass alle Werte entweder Y
, oder A
(für "n/a") sind. Dies ist besser lesbar als 0, 1 und 2 (über TINYINT
) und genauso effizient für die Suche, und auch nur 1 Byte, ABER Verwendungen müssen daran denken, nur Großbuchstaben anzugeben, sonst erhalten sie möglicherweise nicht die erwarteten Ergebnisse .
Es gibt keinen Grund bei allenVARCHAR(3)
zu verwenden und speichern Sie die vollständigen Werte N/A
/Yes
/No
, es sei denn, Sie nicht nur über das System Pflege immer langsamer ;-).
+1000 zu diesem. Ein Bit-Datentyp hat keine 2 Werte, er hat 3. 1, 0 und NULL. –
Tolle Idee und die einfachste zu implementieren, da ich die DB in Ruhe lassen und nur den Code ändern kann. Vielen Dank! –
@SeanLange Danke :). Ich bin mir nicht sicher, ob Sie jemals SilverLight-Entwicklung/XAML durcheinander gebracht haben, aber das war die einzige Umgebung, in der ich ein trinäres boolesches Kontrollkästchen als Formularelement angeboten habe. Sie könnten es tatsächlich überprüfen, deaktivieren Sie es und dann deaktivieren Sie es! Unset wäre ein Kontrollkästchen, das in der Regel schattiert ist und sich deutlich vom Häkchen unterscheidet. Es war sehr nett. –