Sven Rautenberg: NULL-Byte vs. leeren String

Beitrag lesen

Moin!

Sven sagte etwas anderes.

Aber wahsaga hat trotzdem Recht. :)

Es geht um ein dynamisch erzeugtes HTML-Formular - mit den altbekannten Sternchen zur Kennzeichnung von obligatorischen Feldern. Diese Eigenschaft könnte ich doch daraus ermitteln, ob für eine Spalt NULL (keine Eingabe) erlaubt ist oder nicht - oder liege ich falsch?

Ja, theoretisch könntest du vor jeder Formulargenerierung "DESCRIBE TABLE tabelle" machen, die Ausgabe parsen und nachschauen, welche Felder NULL und welche NOT NULL sind.

Die Information obligatorischer oder nicht-obligatorischer Daten aber derart zu verstecken ist nicht zielführend!

In MySQL kannst du ja leider keine Constraints definieren, die dich davon abhalten würden, beispielsweise halbausgefüllte Datensätze zu speichern. Diese Kontrolle muß also die Anwendungslogik erfüllen.

Denn Constraints hin oder her: Die Anwendungslogik muß ja sowieso den SQL-Query abschicken und eine Fehlermeldung dem Benutzer irgendwie verständlich darbieten. Also kann sie das auch gleich direkt machen.

Wenn du in irgendeiner Weise die "Sternchen an den Feldern" in der Datenbank speichern willst, dann mach dafür eine eigene Tabelle auf, in die du "Feldname", "Feldtyp", "obligatorisch" etc. reinspeicherst. Sofern du überhaupt ein derart dynamisches Formular benötigst.

Aber du mußt die 1-Bit-Information "Feld ist obligatorisch (oder nicht)" nicht in jeden einzelnen Datensatz reinspeichern. Das ist absolut redundant! Wenn du eine Million Datensätze hast, dann hast du für jedes obligatorische (oder nicht obligatorische - je nachdem, wie deine Logik ist) Formularfeld eine Million Bit verschwendet. Wenn die Datenbank nicht mit Bits operiert, sondern dafür ein ganzes Byte verschwendet: Ein Megabyte an nutzlosen Daten, wo ein einziges Bit gereicht hätte.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)