it-swarm.com.de

Sollte ich False als Null in einem booleschen Datenbankfeld speichern?

Angenommen, Sie haben eine Anwendung mit einem booleschen Feld in der Tabelle User mit dem Namen Inactive.

Ist irgendetwas von Natur aus falsch daran, nur false als null zu speichern? Wenn ja, können Sie bitte erklären, was der Nachteil sein sollte? Ich habe dies vor einigen Monaten mit jemandem besprochen und wir waren uns einig, dass es keine Rolle spielen sollte, solange Sie dies in der gesamten App/Datenbank konsequent tun. Kürzlich hat jemand, den ich kenne, betont, dass "true" true oder false verwendet werden sollte, aber er hat nicht wirklich erklärt, warum.

21
Ominus

Ist irgendetwas von Natur aus falsch daran, nur false als null zu speichern?

Ja.

Wenn ja, können Sie bitte erklären, was der Nachteil sein sollte?

NULL ist nicht dasselbe wie False.

Per Definition sollten Vergleiche (und Logik), die NULL beinhalten, Werte von NULL (nicht False) zurückgeben. SQL-Implementierungen können jedoch variieren.

True and NULL ist NULL (nicht False).

True and NULL or False ist NULL (nicht False).

http://en.wikipedia.org/wiki/Null_ (SQL) # Dreiwertige_Logik_.283VL.29

http://technet.Microsoft.com/en-us/library/cc966426.aspx

51
S.Lott

Indem Sie Nullen in einem booleschen Feld zulassen, verwandeln Sie eine beabsichtigte binäre Darstellung (wahr/falsch) in eine dreistufige Darstellung (wahr, falsch, null), in der Ihre 'Null'-Einträge unbestimmt sind. Der Wert 'null' ist weder angemessen 'wahr' noch 'falsch'. Welchen Grund müssten Sie Ihre Darstellung erweitern, um ungenau zu sein?

Selbst wenn Sie sich für ein Muster wie dieses entscheiden und es in Ihrer gesamten Anwendung konsequent ausführen, ist dies nicht in Ordnung. Sie werden in eine Situation geraten, in der es für frische Augen nicht klar ist, warum dieses Muster vorhanden ist, oder Sie werden eher in eine Situation geraten, in der dieses Muster versehentlich gebrochen wird.

15
Jacob Maristany

Was andere gesagt haben. 3 mögliche Werte sind keine Booleschen Werte.

Möglicherweise benötigen Sie jedoch 3 Werte. Wie (wahr, falsch, unbekannt). Selbst wenn dies der Fall ist, werden Sie, wenn Sie sich in der Ultra-Normalisierung befinden, überhaupt keine Nullwerte zulassen. Stattdessen speichern Sie einen echten Booleschen Wert in einer anderen Tabelle mit einer 1: 1-Beziehung. Ein Nullwert könnte in einer Abfrage durch einen "fehlgeschlagenen" äußeren Join erzeugt werden, nicht durch einen physisch gespeicherten Nullwert.

5
Lord Tydus