Я бы использовал здесь подтипы сущностей. Создайте одну таблицу для транзакций (и, как сказал более ранний автор, возможно, лучше использовать другой термин) и сохраните там все, что часто встречается. Затем создайте одну таблицу «подтип» для каждой специализации. Эти таблицы подтипов должны иметь тот же первичный ключ, что и основная таблица («сильная» сущность) и поля, которые являются уникальными для этой конкретной специализации. Каждый подтип относится к сильной сущности взаимно-однозначно с необязательным участием на стороне подтипа и обязательным участием на стороне сильной сущности.
Затем, чтобы упростить запросы, определите представление, которое (внешний) объединяет сильную сущность со всеми подтипами сущности, чтобы вы могли легко «увидеть» все.
Вот простой (и общий) пример того, как это настроить:
create table Employee (
eid int primary key,
first_name text,
last_name text not null
)
create table Salaried (
eid int primary key,
annualSalaryUSD money not null
)
create table Hourly (
eid int primary key,
hourlyRateUSD money not null
)