mysql: text (NOT) NULL
klaus
- datenbank
0 Cheatah0 Sven Rautenberg0 King^Lully0 Ilja0 King^Lully0 Sven Rautenberg0 King^Lully0 Ilja
moin moin!
ich habe eine frage, und zwar hab ich ein kleines mysql datenbank backup script gebastelt. dabei is mir die frage gekommen, wozu beispielsweise zu einem feld vom typ text diese NULL ist. also man kann das ja auf NULL oder NOT NULL stellen. kann mir das kurz jemand erklären?
vielen dank schonma!
Hi,
ich habe eine frage, und zwar hab ich ein kleines mysql datenbank backup script gebastelt. dabei is mir die frage gekommen, wozu beispielsweise zu einem feld vom typ text diese NULL ist. also man kann das ja auf NULL oder NOT NULL stellen. kann mir das kurz jemand erklären?
es sagt aus, ob die Spalte NULL enthalten darf oder nicht. Interpretiere "NOT NULL" einfach als "Pflichtfeld".
Cheatah
Moin!
Interpretiere "NOT NULL" einfach als "Pflichtfeld".
Diese Interpretation würde ich nicht wählen. Sie ist in vielerlei Hinsicht mißverständlich.
- Sven Rautenberg
Interpretiere "NOT NULL" einfach als "Pflichtfeld".
Diese Interpretation würde ich nicht wählen. Sie ist in vielerlei Hinsicht mißverständlich.
Nullus (altlatein) = keiner
Nihil (altlatein, vgl. NIL) = nichts
"nullable" heisst, dass ein Datenfeld die kodierte Information "nicht vorhanden" beinhalten darf. "not nullable" heisst, dass das Datenfeld das nicht darf, aber selbstverständlich Zeichenketten der Länge 0.
"NULL" (früher gerne auch "NIL") wurde eingeführt, weil man die Kodierung "nicht vorhanden" in einer Zeichenkette der Länge 0 als falsch empfand.
Das ist natürlich höchst diskussionswürdig, denn die durch NULL eingeführte "dreiwertige Logik" ist ja ein hoher Preis.
yo,
Interpretiere "NOT NULL" einfach als "Pflichtfeld".
Diese Interpretation würde ich nicht wählen. Sie ist in vielerlei Hinsicht mißverständlich.
was spricht den dagegen ? ich finde das als "plastische anschauung" gar nicht so schlecht. wenn ich einen bogen ausfülle und dort ein pflichtfeld sehen würde, dann würde ich dort einen wert eintragen.
Ilja
Interpretiere "NOT NULL" einfach als "Pflichtfeld".
Diese Interpretation würde ich nicht wählen. Sie ist in vielerlei Hinsicht mißverständlich.
was spricht den dagegen ? ich finde das als "plastische anschauung" gar nicht so schlecht. wenn ich einen bogen ausfülle und dort ein pflichtfeld sehen würde, dann würde ich dort einen wert eintragen.
Sven spielt recht offensichtlich auf die dreiwertige Logik an, die auf einmal gegeben ist, beispielhaft erkennbar an:
Sachverhalt: Nur ein Haus liegt an einer Strasse und hat (darum) keine Hausnummer
Wird dieser Sachverhalt mit einer leeren Zeichenkette im Feld "Strassennummer" kodiert, so ist unklar, ob die Information nicht vorliegt oder ob die Information bekanntermassen nicht existiert. (Donald Rumsfeld hat sich seine Gedanken dazu gemacht, hier absichtlich eine Quelle eines offensichtlich Unverständigen <http://www.speichpartner.ch/speich_wirtschaftssatire_Donald Rumsfeld.html> ;)
Sven deutet "datenbankphilosophisch und auf Meta-Meta-Ebene" so zu sagen an, dass es Pflichtfelder per se nicht gibt. ;)
Moin!
Interpretiere "NOT NULL" einfach als "Pflichtfeld".
Diese Interpretation würde ich nicht wählen. Sie ist in vielerlei Hinsicht mißverständlich.
was spricht den dagegen ? ich finde das als "plastische anschauung" gar nicht so schlecht. wenn ich einen bogen ausfülle und dort ein pflichtfeld sehen würde, dann würde ich dort einen wert eintragen.
Ein Feld auf einem Bogen ist immer "NOT NULL", es gibt keine Möglichkeit für "NULL".
Außerdem: Was ist ein Pflichtfeld? Ich kann problemlos ein Feld ignorieren, obwohl es Pflichtfeld ist. Oder irgendeinen Müll reinschreiben. "Pflichtfeld" ist eine Eigenschaft, die komplexe Implikationen nach sich zieht, unter anderem aus dem Bereich Workflow, die mit der schlichten Datenbank-Eigenschaft "NULL" ganz wenig zu tun haben.
- Sven Rautenberg
was spricht den dagegen ? ich finde das als "plastische anschauung" gar nicht so schlecht. wenn ich einen bogen ausfülle und dort ein pflichtfeld sehen würde, dann würde ich dort einen wert eintragen.
Ein Feld auf einem Bogen ist immer "NOT NULL", es gibt keine Möglichkeit für "NULL".
Es gäbe die Möglichkeit, dass eine aus zwei Elementen bestehende radiobutton-Gruppe "Information vorhanden/n.vorhanden" der Erfassung per Textbox vorgeschaltet ist.
Sowas gibt es durchaus auf papiernen Erfassungsbögen und in Webformularen.
Außerdem: Was ist ein Pflichtfeld? Ich kann problemlos ein Feld ignorieren, obwohl es Pflichtfeld ist. Oder irgendeinen Müll reinschreiben. "Pflichtfeld" ist eine Eigenschaft, die komplexe Implikationen nach sich zieht, unter anderem aus dem Bereich Workflow, die mit der schlichten Datenbank-Eigenschaft "NULL" ganz wenig zu tun haben.
Anders formuliert: In der relationalen Datenhaltung haben Datenfelder oft das Attribut "Information vorhanden/n.vorhanden", dieses Attribut hat mit "Pflichtfeld" eigentlich nichts zu tun.
yo,
Ein Feld auf einem Bogen ist immer "NOT NULL", es gibt keine Möglichkeit für "NULL".
hmm, wenn ich ankreuzen muss, Mann/Frau und keines ankreuze, dass entspricht nicht NULL ? oder es steht dort, telefonummer angeben pflichtfeld und ich schreibe nichts rein, heißt das, ich habe keine telefonnummer ?
Außerdem: Was ist ein Pflichtfeld?
wenn ich einen bogen abgebe und die pflichtfelder nicht ausgefühlt sind, wird er nicht angenommen. das dbms macht das gleiche, es nimmt datensätze nicht auf mit NOT NULL constraints, wenn kein wert angegeben wurde.
Ich kann problemlos ein Feld ignorieren, obwohl es Pflichtfeld
ist.
klar, aber der sachbearbeiter wird es dir nicht abnehmen, so wie das dbms dir den datensatz nicht abnimmt. auch dort kannst du NULL reinschreiben in einem insert-statement. der sachbearbeiter wird dich darauf hinweisen wie auch das dbms.
Ilja
Außerdem: Was ist ein Pflichtfeld?
wenn ich einen bogen abgebe und die pflichtfelder nicht ausgefühlt sind, wird er nicht angenommen. das dbms macht das gleiche, es nimmt datensätze nicht auf mit NOT NULL constraints, wenn kein wert angegeben wurde.
Ein "Pflichtfeld" ist eine Einstellung (ein CONSTRAINT) auf Datenfeldeben, vergleichbar einem CHECK-CONSTRAINT.
NULL wiederum ist eine andere Abstraktionsebene und heisst einfach "Information nicht erfasst".
Wenn "not nullable" als pflichtfelderzwingend genutzt wird, ist das - wie Sven ausgeführt hat - durchaus problematisch, wir hätten da so zu sagen eine missbräuchliche Nutzung.
Eine andere so zu sagen missbräuchliche Nutzung, nämlich das Kodieren einer nichterfassten Information in einer Zeichenkette der Länge 0 hat erst zur Erfindung des NULL-Werts in modernen RDBMSen geführt.
(Wenn wir jetzt anfangen das NULL-Attribut so zu sagen missbräuchlich zu nutzen, wohin wird uns das führen? Werden wir anfangen in RDBMSen zwischen nichterfassten und nichtexistenten Informationen zu unterscheiden? Werden wir ein "Super-Null" entwickeln? ;)