In PostgreSQL è possibile aggiungere una chiave esterna in modo condizionale?Chiave esterna PostgreSQL condizionale
Qualcosa di simile: ALTER TABLE table1 ADD FOREIGN KEY (some_id) REFERENCES other_table WHERE some_id NOT IN (0,-1) AND some_id IS NOT NULL;
In particolare, la mia tabella di riferimento ha tutti i numeri interi positivi (1+) ma il tavolo ho bisogno di aggiungere la chiave esterna per può contenere zero (0), un nullo e negativo (-1), invece, tutto ciò significa qualcosa di diverso.
Note:
sono pienamente consapevole che si tratta di una cattiva progettazione tavolo, ma era un trucco intelligente costruito 10 anni fa, quando abbiamo a disposizione, a questo punto non esistevano le caratteristiche e le risorse . Questo sistema gestisce centinaia di negozi al dettaglio, quindi tornare indietro e cambiare il metodo a questo punto potrebbe richiedere mesi che non abbiamo.
Non riesco a utilizzare un trigger, questo DEVE essere fatto con una chiave esterna.
Genio! Hai ragione che è un po 'brutto, ma il database si gestisce ancora da solo, quindi dovrebbe fare il trucco! – trex005
AH, hai mai lavorato alla fonte Postgres? Questa potrebbe essere una caratteristica interessante che potresti aggiungere facendo esattamente questo dietro le quinte. – trex005
@ trex005: Non ho lavorato alle origini PG. Ma ogni tanto fare il tifo sulla lista degli hacker è una mia impressione, che una tale caratteristica non sarebbe gradita. Se generalizzi il tuo esempio (abbina qualsiasi cosa tranne '0' e' -1') e pensi a una sintassi generica che copra tutti i possibili casi, otterrai un complesso sintattico piuttosto complesso. Dall'altra parte della scala: non c'è nulla che tu non possa fare con gli strumenti esistenti già. Il risultato netto: le risorse scarse (tempo/budget dello sviluppatore) pagheranno meglio su altri articoli TODO. Ma questa è solo la mia impressione. Sei libero di contattarli. –