Sie versuchen, sicherzustellen, dass die in einer Tabelle eingefügten Werte in einer anderen Tabelle vorhanden sind, d. H. Einen Fremdschlüssel erzwingen. So wäre das:
CREATE TABLE RollingStocks (
...
CONSTRAINT Pk_RollingStocks Primary Key (Id),
CONSTRAINT RollingStocks_CategoryId_FK (RollingStockCategoryId)
REFERENCES FreightWagonTypes (ID)
);
Abgesehen davon, dass Sie einen Fremdschlüssel erzwingen möchten, die zwei Tabellen verweist. Dies kann nicht getan werden.
Sie haben ein paar Optionen. Eine wäre es, FreightWagonTypes und LocomotiveClasses in einer einzigen Tabelle zusammenzufassen. Wenn Sie für andere Teile Ihrer Anwendung separate Tabellen benötigen, können Sie eine materialisierte Ansicht zum Erzwingen des Fremdschlüssels erstellen. Materialisierte Ansichten sind wie Tabellen und können durch Fremdschlüssel referenziert werden. Diese Option wird nicht funktionieren, wenn die Schlüsselwerte für die zwei Tabellen kollidieren. Eine andere Option besteht darin, zu erkennen, dass das Vorhandensein von zwei in Frage kommenden referenzierten Tabellen suggeriert, dass RollingStock möglicherweise in zwei Tabellen aufgeteilt werden muss - oder vielleicht drei: ein Supertyp und zwei Untertyptabellen, nämlich RollingStock und FreightWagons, Locomotives .
Übrigens, was ist mit PassengerCoaches, GuardsWagons und RestaurantCars?
Eine weitere Alternative besteht darin, RollingStockCategoryId in zwei Spalten mit NULL-Wert aufzuteilen, eine als FK für FreightWagonTypes und die andere als FK für LocomotiveClasses. Sie können eine Prüfbedingung hinzufügen, um zu sagen, dass eine (und nur eine) für jede Zeile nicht null sein darf. –