То, что вы пытаетесь сделать, это убедиться, что значения, вставленные в одну таблицу, существуют в другой таблице, то есть принудительно использовать внешний ключ. Так что это будет:
CREATE TABLE RollingStocks (
...
CONSTRAINT Pk_RollingStocks Primary Key (Id),
CONSTRAINT RollingStocks_CategoryId_FK (RollingStockCategoryId )
REFERENCES FreightWagonTypes (ID)
);
За исключением того, что вы хотите применить внешний ключ, который ссылается на две таблицы. Это не может быть сделано.
У вас есть несколько вариантов. Можно было бы объединить FreightWagonTypes и LocomotiveClasses в одну таблицу. Если вам нужны отдельные таблицы для других частей вашего приложения, вы можете создать материализованное представление для обеспечения применения внешнего ключа. Материализованные представления похожи на таблицы и могут ссылаться на внешние ключи. Эта опция не будет работать, если значения ключей для двух таблиц конфликтуют.
Другим вариантом является признание того, что наличие двух возможных ссылочных таблиц предполагает, что RollingStock, возможно, необходимо разделить на две таблицы - или, возможно, три: таблицы супертипа и две подтипы, то есть RollingStock и FreightWagons, Locomotives.
Кстати, а как насчет пассажирских вагонов, вагонов-охранников и вагонов-ресторанов?