У меня есть следующие схемы баз данных:SQL Server внешний ключ для нескольких таблиц
members_company1(id, name, ...);
members_company2(id, name, ...);
profiles(memberid, membertypeid, ...);
membertypes(id, name, ...)
[
{ id : 1, name : 'company1', ... },
{ id : 2, name : 'company2', ... }
];
Таким образом, каждый профиль принадлежит к определенному члену либо из company1 или Общества2 в зависимости от membertypeid
значения
members_company1 ————————— members_company2
———————————————— ————————————————
id ——————————> memberid <——————————— id
name membertypeid name
/|\
|
|
profiles |
—————————— |
memberid ————————+
membertypeid
Я интересно, можно ли создать внешний ключ в таблице profiles
для ссылочной целостности на основе memberid
и membertypeid
пары для ссылки на members_company1 или members_company2 записи таблицы?
Похоже, вам нужно иметь company_id в таблице участников вместо того, чтобы держать таблицу участников для каждой компании. –
@KevinCrowell Я знаю, хорошо, но я работаю над тем, что у меня есть, поэтому предположим, что я не контролирую таблицы 'members_company1' и' members_company2'. Единственное уродливое решение, которое я имею в виду сейчас, - создать таблицу 'members', которая будет хранить идентификаторы и типы из этих 2 таблиц, но это как бы дублирует данные и потребует больше действий при вставке новых записей в таблицы members_company. –
Внешний ключ может ссылаться только на одну таблицу. Но если вы хотите начать очистку, вы можете создать таблицу 'members', как предложил @KevinCrowell, заполнить ее из двух таблиц' members_company' и заменить их на представления. Вы можете использовать триггеры «INSTEAD OF» в представлениях для «перенаправления» обновлений в новую таблицу. Это по-прежнему некоторая работа, но это был бы один из способов исправить вашу модель данных, не нарушая существующие приложения (если это возможно в вашей ситуации, конечно). – Pondlife