Sehe ich das richtig, dass alle 4 Spalten einzeln und in Kombination eindeutig sein sollen? Und dann noch zusätzlich über alle 4 Spalten?
So sieht es aus- zumindest anhand der zuletzt gezeigten Constraints und Trigger. Leider hat der TE kaum eine Frage in dieser Richtung wirklich beantwortet.
zum Code:
Ist es unter Firebird notwendig die Werte erst in Variablen zu schreiben?
Sonst kann man direkt new/old Werte in die Statements setzen.
Das Update find ich etwas übertrieben.
Entweder es gibt einen Wert, dann Insert oder es wird einer entfernt, dann delete.
Nun nochmal meine Eingangsbemerkung:
Das Konstrukt ist ziemlich daneben. Der Clou aber ist nun: Die von Dir entworfene Hilfskonstruktion ist ziemlich nahe an dem, wie es normalerweise umgesetzt würde (mit dem Vorteil, das man ohne Modelländerung beliebig viele Werte verwalten kann statt maximal 4)
Diese denormalisierten Felder laufen natürlich auch an jeder anderen Stelle, wo sie verwendet werden, gegen die relationalen Prinzipien und verursachen Extra (Code) Aufwand.
Falls Du das grad erfunden hast, wirf es wieder weg. Falls es sich um ein bestehendes System handelt, versuch lieber, es abzuschaffen.
Das eigenartige bei solchen Lösungen ist ja meist, dass irgendwer meint, auf diese Weise etwas Aufwand zu sparen. "Nein, dafür machen wir nicht extra ne neue Tabelle!"