UNIQUE und NULL ist anscheinend ein altbekanntes Thema in der SQL-Welt, welches ich erst jetzt nach zuvor Oracle erlebe,
die Fronten sind wohl geklärt, aber vielleicht hat noch wer was anzumerken oder lernt es jetzt erst auch kennen
für einzelne Spalten interessiert mich das Thema nicht besonders,
wenn eine Spalte UNIQUE ist, dann bei mir zumindest auch gleich NOT NULL dazu,
obwohl (mehrere?) NULL darin zu erlauben während alles andere UNIQUE sein muss sicherlich als Thema allgemein nicht zu ignorieren ist
mein Problem ist UNIQUE-Index auf mehrere Spalten A, B, C, für die jeweils NULL erlaubt ist
einen Eintrag <‚a1‘,null, null> darf ich in Postgres mehrfach eintragen, Peng, wie kann das sein?
Links habe ich gefunden a la
http://ocelot.ca/blog/blog/2013/09/11/null-and-unique/
aber ist dieses Verhalten hilfreich?
NULL ist ja für sich schon Problem genug, Sonder-Vergleichssyntax, schlimmer als in Java == vs equals, möchte ich meinen,
interessant ist der Punkt auch im Link NULLs sort together for purposes of GROUP BY, ORDER BY, or duplicate elimination.
→
[sql]select A, B, C from X group by A, B, C having count(*) > 1[/sql]
liefert Ergebnisse, trotz eingeschalter UNIQUE-Bedingung für diese drei Spalten…,
finde ich nicht in Ordnung
Oracle hatte ich bisher lange Jahre, da war es anders,
anscheinend mit dem frechen, aber effektiven Weg, alle NULL-Werte zu ignorieren,
dass <null,null, null> dann immer noch mehrfach eingefügt werden könnte ist nicht ganz ideal, aber könnte ich verkraften,
ein solcher Sondereintrag fällt auch so auf, wenigstens <‚a1‘,null, null> nur 1x erlaubt, Hauptziel erreicht
viele (Text-)Spalten bei mir könnte ich auf NON NULL und Leerstring oder sonstige Dummy-Werte umstellen,
eh schon in Überlegung teilweise, ich habe z.B. Probleme mit Daten aus GUI-Textfeldern oder CSV → Leerstring vs. anders erstellte Daten → null,
aber quasi den Baustein NULL aus der Werkzeugkasten zu entfernen finde ich gar nicht gut,
obwohl ja in manchen Sprachen/ Programmierphilosophieren allgemein ein Thema,
aber noch gibt es NULL in SQL, warum dann Umgang damit so schwer machen?
mit normalen Problem WHERE A is null
kann ich noch leben,
es funktioniert die Gruppierung,
Sortierung ist auch zumindest so gnädig, alle null nicht beliebig einzusortieren,
aber dieses Verhalten mit UNIQUE hier, ist das irgendwo als nützlich anzusehen?
besonderes Augenmerk habe ich noch auf Constraint-geschützte Fremdschlüssel-Spalten,
ich möchte und habe auch Einträge, die nicht auf etwas anderes verweisen,
falsche Fremdschlüssel-Id ist nicht erlaubt, einen Dummy-Eintrag in anderer Tabelle einzufügen wäre Wahnsinn (in NULL-freier Programmierung ähnlich),
was soll ich eintragen?
NULL erlauben und ein Index mit COALESCE( XY_ID, 0 ) bzw. NVL( XY_ID, 0 )
ist wohl die Lösung, überall zu lesen,
kein schöner Zustand, werde ich jetzt wohl als Standard-Syntax in allen derartigen UNIQUE Indexen bedenken müssen…
geht es doch besser oder sonstige schlaue Anmerkungen?