MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 21.05.2019, 07:18   #1
Yuppilarve
Neuer Benutzer
Neuer Benutzer
Standard Admin : MSSQL - Frage: Warum NULL Werte?

Guten Morgen.
Ich beschäftige mich nun schon eine Weile mit dem Thema "NULL".

Zuerst meine Frage: Warum verwendet man NULL, bzw. warum lässt man dies zu? Was sind die Vor- & Nachteile?

In meiner SQL Schulung lernte ich, dass NULL eine Sonderstellung einnimmt.
Die MS Doku geht da auch drauf ein.
https://docs.microsoft.com/de-de/sql...ql-server-2017

Bei der Erstellung der Tabelle kann ich in den Spalteneigenschaften NULL verhindern....

In der Doku steht "NULL weist darauf hin, dass der Wert unbekannt ist.", allerdings nicht ganz einfach zu handeln ist.

Wieso verwendet man für einen "unbekannten Wert" (z.B. Telefonnummer von Kunde ist unbekannt) nicht ein Zeichen, z.B. "/" oder so???

Ich hoffe die Frage ist nicht zu anfängermäßig
Yuppilarve ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.05.2019, 08:11   #2
hcscherzer
MOF Guru
MOF Guru
Standard

NULL ist ja nun kein "unbekannter" Wert sondern ein Zustand.
Und dieser Zustand ist, dass das entsprechende Feld in dem entsprechenden Datensatz keinen Wert beinhaltet.

Da man sich auf irgendein Zeichen verständigen müsste, wäre das viel komplizierter als das Feld einfach leer zu lassen.

Und mit den Operatoren IS NULL und IS NOT NULL kann man die allermeisten Dinge problemlos abhandeln.
Und, wenn das nicht reicht, gibt es (in T_SQL) die Function ISNULL() mit der in einer View dem Ergebnis-Datensatz ein fiktiver Wert übergeben werden kann, falls das Feld leer ist und im Ergebnis irgendwas stehen soll oder wenn für ein Vergleichskriterium ein konkreter Wert benötigt wird.

Bei historisierenden Daten steht ja oft kein Ende fest und dann lässt man es in der Datenbank eben leer.
Code:

select * from tabelle
 where anfang <= sysdatetime() and (ende is null or ende >= sysdatetime())
Liefert z.B. alle aktuellen Datensätze.

Mit einem fiktiven Datum unter der Verwendung der Function wäre das so:
Code:

select * from tabelle
 where anfang <= sysdatetime() and isnull(ende, datefromparts(2999, 12, 31)) >= sysdatetime()

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (21.05.2019 um 08:13 Uhr).
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.05.2019, 06:28   #3
Yuppilarve
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Moin Hans-Christian,

danke für die Erläuterungen

Zitat: von hcscherzer Beitrag anzeigen


Bei historisierenden Daten steht ja oft kein Ende fest und dann lässt man es in der Datenbank eben leer.

An diesen Fall hatte ich nicht gedacht. Da macht das durchaus Sinn.

Bei uns wird die Datenbank bei Anpassungen durch den Software Hersteller erweitert, z.B. eine Checkbox im Client. Diese ist dann in der Tabelle 0 oder 1 sein. Als die Spalte eingefügt wurde, gab es aber bereits mehrere 100.000 Datensätze. Ich hätte bei Anlage der Spalte alle Werte initial auf 0 gesetzt und nicht auf NULL. NULL wäre meiner Meinung nach nicht zulässig. Aber vielleicht fehlt mit da noch der Blick.
Ok. Man könnte sagen 0= deaktiviert, 1=aktiviert und NULL ist noch "jungfräulich"......

Gruß Adrian
Yuppilarve ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.05.2019, 06:11   #4
markusxy
MOF Meister
MOF Meister
Standard

Zitat: von Yuppilarve Beitrag anzeigen

Ich hätte bei Anlage der Spalte alle Werte initial auf 0 gesetzt und nicht auf NULL. NULL wäre meiner Meinung nach nicht zulässig.

Da gibt es keine Regel. Man muss das für jeden Fall festlegen ob 0/1/Null.
Ein Null mag gut sein, wenn man sicherstellen möchte, dass jeder Wert explizit festgelegt wurde.

LG Markus
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 27.05.2019, 05:37   #5
Beere
MOF Koryphäe
MOF Koryphäe
Standard

Btw.: Bei Bit-Feldern mit Nullable kommt es gerne zu Schreibkonflikten im Zusammenhang mit ACCESS...

__________________

mfg
Beere
Beere ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.