none
NULL- oder Default-Wert RRS feed

  • Frage

  • Hallo

    Ich habe ein Formular bei welchem es Muss- und optionale Felder (z.B. km, Hubraum) hat. Wird bei den optionalen Feldern nichts angegeben wird aktuell nichts in die DB geschrieben -> es entsteht ein NULL-Wert.

    Was für Auswirkungen können NULL-Werte haben auf Integrität, Performance, usw.?

    Oder empfehlt Ihr einen Default-Wert zu nehmen, wenn nichts ausgefüllt wurde. Z.B. bei km kann ich ja nicht 0 reinschreiben, da dies nicht korrekt ist. Ich könnte ein Leerzeichen nehmen.

    Danke im Voraus für euer Feedback.

    Gruss Miller

    Donnerstag, 25. Juni 2015 19:11

Antworten

  • Was für Auswirkungen können NULL-Werte haben auf Integrität, Performance, usw.?

    Hallo Miller,

    fast keine. Für Nullable Felder muss SQL Server pro Datensatz ein Bit zusätzlich speichern, der markiert, ob der Wert Null ist oder nicht; bei 1-8 Nullable Felder sind das also zusätzlich 1 Byte.

    Wie Peter schon so richtig schrieb, kennzeichnet ein Null, das der Wert nicht explizit definiert ist. Was es bei Null Werten zu beachten ist, ist gut in der MSDN beschrieben: NULL-Werte


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 26. Juni 2015 06:05
  • NULL-Werte sind in Systemen, wo es um höchste höchste Performance oder auch um wirklich große Datenmengen durchaus ein Thema: in der Form von No-Go, also nur mit echter Notwendigkeit (wie bei Mess-Zahlen)
    Zum einen ist der CPU-Cache nicht umsonst und vor allem winzig, zum anderen multiplizieren sich Datenmengen ja, und dann ist auch der RAM nicht umsonst.

    Für kleinere Systeme mag das egal sein, da geht es vor allem um Richtigkeit der Daten - und viele Entwickler, so stelle ich immer wieder fest, sind sich nicht aller Auswirkungen von NULL vollends bewusst. Das kann auf lange sicht zu unvollständigen Daten in Berichten zB führen.

    Daher, Best Practice: wissen, was man tut und warum man NULL zulassen muss und wie man es dann behandeln muss. -> klare, einheitliche Entwicklungsrichtlinien sind hier der Schlüssel.


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
    www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com


    Freitag, 26. Juni 2015 16:37
  • Hi,
    wenn Du auf Nullwerte verzichtest, verzichtest Du auch auf die Erkennung, ob ein Wert erfasst wurde. Bei Deinen "km" scheint diese Erkennung aber von Bedeutung zu sein. Die Auswertung von Nullwerten erfordert zusätzliche Befehle, die das Programm um einige Nanosekunden verlangsamen. Diese Verlangsamung ist praktisch ohne Bedeutung. Standardwerte sind immer dann sinnvoll, wenn die Erkennung, das Werte erfasst wurden, nicht erforderlich ist. Da ein km-Angabe vermutlich eine numerische Angabe ist, die später für Berechnung genutzt wird, kann kein nicht-numerisches Zeichen, wie ein Leerzeichen dort abgelegt werden.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 25. Juni 2015 19:30

Alle Antworten

  • Hi,
    wenn Du auf Nullwerte verzichtest, verzichtest Du auch auf die Erkennung, ob ein Wert erfasst wurde. Bei Deinen "km" scheint diese Erkennung aber von Bedeutung zu sein. Die Auswertung von Nullwerten erfordert zusätzliche Befehle, die das Programm um einige Nanosekunden verlangsamen. Diese Verlangsamung ist praktisch ohne Bedeutung. Standardwerte sind immer dann sinnvoll, wenn die Erkennung, das Werte erfasst wurden, nicht erforderlich ist. Da ein km-Angabe vermutlich eine numerische Angabe ist, die später für Berechnung genutzt wird, kann kein nicht-numerisches Zeichen, wie ein Leerzeichen dort abgelegt werden.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 25. Juni 2015 19:30
  • Was für Auswirkungen können NULL-Werte haben auf Integrität, Performance, usw.?

    Hallo Miller,

    fast keine. Für Nullable Felder muss SQL Server pro Datensatz ein Bit zusätzlich speichern, der markiert, ob der Wert Null ist oder nicht; bei 1-8 Nullable Felder sind das also zusätzlich 1 Byte.

    Wie Peter schon so richtig schrieb, kennzeichnet ein Null, das der Wert nicht explizit definiert ist. Was es bei Null Werten zu beachten ist, ist gut in der MSDN beschrieben: NULL-Werte


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 26. Juni 2015 06:05
  • NULL-Werte sind in Systemen, wo es um höchste höchste Performance oder auch um wirklich große Datenmengen durchaus ein Thema: in der Form von No-Go, also nur mit echter Notwendigkeit (wie bei Mess-Zahlen)
    Zum einen ist der CPU-Cache nicht umsonst und vor allem winzig, zum anderen multiplizieren sich Datenmengen ja, und dann ist auch der RAM nicht umsonst.

    Für kleinere Systeme mag das egal sein, da geht es vor allem um Richtigkeit der Daten - und viele Entwickler, so stelle ich immer wieder fest, sind sich nicht aller Auswirkungen von NULL vollends bewusst. Das kann auf lange sicht zu unvollständigen Daten in Berichten zB führen.

    Daher, Best Practice: wissen, was man tut und warum man NULL zulassen muss und wie man es dann behandeln muss. -> klare, einheitliche Entwicklungsrichtlinien sind hier der Schlüssel.


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
    www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com


    Freitag, 26. Juni 2015 16:37