Иногда это запах кода схемы.
Если вы планируете поместить это как один столбец в Z, означает ли это, что только один из A, B, C может быть применим к Z?
Прежде чем принять решение, я бы действительно сказал, что мне нужно больше узнать о сущности и модели использования. Доступ поступает из известных A, B или C, или дополнительная информация ведется со стороны Z? Если он управляется со стороны Z, хотите ли вы получить все столбцы A, B и C и затем использовать их выборочно из приложения, или просто Zs с As или Zs с Bs, т.е. вы обычно знаете подтип? Кроме того, у A, B и C должно быть достаточно столбцов, чтобы заслужить разделение строки Zs, если они равны 1-1 (т. Е. Вы можете иметь столбцы в Z и просто NULL)
Просто для полноты, другая возможность, которая дает вам больше ссылочной целостности (потому что с одним столбцом вы не можете быть FK для одной из трех таблиц), это иметь таблицы Z_A, Z_B, Z_C:
со схемами:
Z_A:
Z_ID REFERENCES (Z.ID)
A_ID REFERENCES (A.ID)
Z_B:
Z_ID REFERENCES (Z.ID)
B_ID REFERENCES (B.ID)
Z_C:
Z_ID REFERENCES (Z.ID)
C_ID REFERENCES (C.ID)
Поскольку все идентификаторы уникальны в каждой таблице, это довольно красиво ограничивает все, за исключением того, что нет ничего декларативного, чтобы не допустить, чтобы Z лежал в нескольких таблицах без триггера (нельзя создать уникальное ограничение для индексированного представления над UNION ALL в SQL Server ).
Хотя кажется, что количество таблиц умножается, их обычно можно свернуть в представления.