Ich suche nach einer einfachen Möglichkeit, eine Anwendungskonfigurationstabelle auf 1 Zeile zu beschränken. Ich weiß, dass ich dies mit einer virtuellen Spalte tun kann, die eine Unterabfrage oder eine materialisierte Ansicht enthält, aber in Wirklichkeit ist es eine einfache Tabelle, für die ich eine Einschränkung brauche, die nicht mehr Zeilen benötigt, als die Tabelle zu erstellen. p>
Der einfachste Weg, an den ich gedacht habe, ist ein ID-Feld, das auf 1 gesetzt ist, und eine Check-Einschränkung, dass die ID 1 sein muss - aber das fügt der Tabelle ein verwirrendes zusätzliches Feld hinzu, also hoffe ich, dass etwas offensichtlich ist. m fehlt, wie eine Prüfbedingung, bei der UNIQUE_FIELD = MAX (UNIQUE_FIELD) nicht zulässig ist.
Am einfachsten ist ein eindeutiger funktionsbasierter Index für eine Konstante
%Vor%Alternativen:
Statt einer Tabelle könnten Sie einen Blick auf DUAL werfen Das würde wirklich bedeuten, dass UPDATE tatsächlich eine CREATE- oder REPLACE-VIEW wäre, die möglicherweise nicht angemessen ist. Funktionen, die Werte aus einem Pakethauptteil oder aus globalen Anwendungskontexten zurückgeben, können eine Umgehung dafür sein, wenn dies zu Ungültigkeitsproblemen führt.
Mit 11g ist eine READ ONLY-Tabelle (oder in früheren Versionen eine Tabelle in einem schreibgeschützten Tablespace) eine Option.
Hier sind einige Optionen:
SELECT 1024 as buffer_size, '/var/tmp' as temp_dir, 'other constant' as other_constant from dual
definierte Ansicht. Dies ist keine feste Lösung. (ungetestet)
SQL verfügt nicht über eine präzise Syntax, um die leere Gruppe von Attributen als Schlüssel anzugeben, was eine Schande ist, da die redundante zusätzliche Spalte nicht mehr benötigt wird. Der effektive Schlüssel hier ist tatsächlich die leere Menge, weshalb ich eine UNIQUE-Einschränkung anstelle von PRIMARY KEY für die Einschränkung auf x verwendet habe.
Tags und Links sql oracle database-design oracle11g referential-integrity