По сути, это наследование нескольких таблиц, хотя вы можете смоделировать его в домене как простые ссылочные отношения, если хотите.
Есть много веских причин иметь поле / свойство селектора. Очевидным является то, что приложение или служба получают подсказку о том, как загружать детали, чтобы не приходилось загружать каждую мыслимую строку из каждой мыслимой таблицы (попробуйте это, когда у вас есть 20 различных типов транзакций).
Другая причина заключается в том, что конечному пользователю в большинстве случаев не обязательно нужно знать детали транзакции, но нужно знать тип. Если вы просматриваете отчет A / R из какой-либо финансовой или биллинговой системы, большую часть времени все, что вам нужно знать для базового отчета, это предыдущий баланс, сумма, последующий баланс, и тип транзакции . Без этой информации очень трудно читать. Гроссбух не обязательно отображает детали для каждой транзакции, а некоторые системы могут даже вообще не отслеживать детали.
Самая распространенная альтернатива этому типу модели - это отдельная таблица с целой кучей столбцов, которые можно обнулять для каждого типа транзакции. Хотя я лично презираю эту модель, это требование для многих объектно-реляционных картографов, которые поддерживают только наследование одной таблицы. Это единственный способ, которым вы хотите (или не хотите) моделировать это в базе данных.