Можно попробовать создать главную таблицу идентификаторов, из которой три таблицы общих идентификаторов получают свои первичные ключи.Ваша account
таблица в вопросе будет тогда связана с главной таблицей.В общих чертах:
MasterIdentity
Id (autoincrement)
IdentityType (string, maybe FK to a type lookup table, whatever you want)
Table1
Id (PK, FK to MasterIdentity)
other data
Table2
Id (PK, FK to MasterIdentity)
other data
Table3
Id (PK, FK to MasterIdentity)
other data
Account
Id (its own identifier as you already have)
AccountID (FK to MasterIdentity)
other data
Вставка в любую из трех таблиц будет включать вставку в MasterIdentity
, получение значения идентификатора области из вставки и вставку в нужную таблицу, непосредственно указав идентификатор.(Конечно, все это должно быть атомарным в транзакции.) Обратите внимание, что идентификатор в этих трех таблицах не является значениями с автоматическим приращением, вы их предоставите.
Тогда любая таблица, к которой нужно обратитьсяк этим трем (я полагаю, неперекрывающимся) таблицам будет относиться одна таблица, к которой относятся идентификатор и тип, последняя из которых сообщает вам, какая подтаблица имеет остальные данные этой записи.
(Я почти уверен, что это называется отношением таблицы супертип / подтип, но точно сказать не могу.)