Ist es in PostgreSQL möglich, einen Fremdschlüssel bedingt hinzuzufügen?Bedingter PostgreSQL-Fremdschlüssel
Etwas wie: ALTER TABLE table1 ADD FOREIGN KEY (some_id) REFERENCES other_table WHERE some_id NOT IN (0,-1) AND some_id IS NOT NULL;
Insbesondere hat meine Referenztabelle alle positiven ganzen Zahlen (1+) aber die Tabelle Ich brauche die Fremdschlüssel hinzufügen enthalten Null (0), null und negative (-1) stattdessen alle etwas anderes bedeuten.
Hinweise:
bin ich voll und ganz bewusst, dass diese schlechte Tabellenentwurf ist, aber es war ein kluger Trick 10+ Jahren gebaut, als die Funktionen und Ressourcen, die wir an dieser Stelle zur Verfügung haben, nicht existieren . Dieses System betreibt Hunderte von Einzelhandelsgeschäften, so dass das Zurückgehen und Ändern der Methode zu diesem Zeitpunkt Monate dauern könnte, die wir nicht haben.
Ich kann keinen Trigger verwenden, dies muss mit einem Fremdschlüssel getan werden.
Genie! Du hast Recht, dass es ein bisschen hässlich ist, aber die Datenbank verwaltet sich noch selbst, also sollte es den Trick tun! – trex005
AH, hast du jemals an Postgre Source gearbeitet? Dies könnte eine coole Funktion sein, die Sie hinzufügen könnten, indem Sie genau dies hinter den Kulissen tun. – trex005
@ trex005: Ich habe nicht an den PG-Quellen gearbeitet. Aber auf der Liste des Hackers hin und wieder habe ich den Eindruck, dass ein solches Feature nicht erwünscht wäre. Wenn Sie _ihr_ Beispiel verallgemeinern (mit irgendetwas außer '0' und '-1' übereinstimmen) und über eine generische Syntax nachdenken, die alle möglichen Fälle abdeckt, erhalten Sie ein ziemlich komplexes syntaktisches Konstrukt. Auf der anderen Seite der Skala: Mit den vorhandenen Werkzeugen kann man nichts machen. Das Endergebnis: Die knappen Ressourcen (Entwicklerzeit/Budget) werden sich bei anderen TODO-Items besser auszahlen. Aber das ist nur mein Eindruck. Fiel frei, sie zu kontaktieren. –