How to create unique index auf die Felder mit möglichen null-Werte (Oracle 11g)?
Hier ist die Beispiel-Tabelle mit 3 Spalten (ID, UNIQUE_VALUE, UNIQUE_GROUP_ID)
Möchte ich unter Datensätze können zugelassen werden:
(1, NULL, NULL)
(2, NULL, NULL)
oder
(3, NULL, 7)
(4, 123, 7)
oder (Anmerkung: diese Bedingung ist nicht erlaubt, in unique index
noch unique constraint
)
(5, NULL, 7)
(6, NULL, 7)
und diese kann nicht gestattet werden:
(7, 123, 7)
(8, 123, 7)
Ich erstellt einen eindeutigen index für die letzten 2 Spalten, aber nur die ersten 2 Beispiele werden darf.
Ist es möglich, dass db-überprüfen Sie die Einzigartigkeit dieser 2 Spalten nur, wenn beide nicht null sind?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst nur die Eindeutigkeit für die Zeilen in denen beide
UNIQUE_VALUE
undUNIQUE_GROUP_ID
sind nicht null. Um dies zu tun, können Sie eine eindeutige function-based-index:können Sie die Verwendung der nvl-Funktion zu vermeiden, werden Nullen und setzen Sie einen anderen Wert statt ,
der Nachteil ist, dass der index größer sein wird, und wenn Sie möchten, um die Suche für null-Werte, die Sie haben, die Verwendung der nvl-Funktion, um zu vermeiden, table_access_full.
auch alle null-Werte werden sich unter einem Zweig in den index , so stellen Sie sicher, Ihre Histogramme sind aktualisiert.
Ich Hoffe das hilft dir 🙂