Как представить этот тип отношений FK в SQL Server 2005?

Предположим, что у меня есть две родительские таблицы: Company и Contact . Предположим, что для записи в Company и в Contact должно быть записано 0 или более адресов, где формат адресов для обоих типов записей идентичен. Это означает, что существует необходимость в третьем адресе таблицы, где должны храниться адреса.

Мой вопрос в том, как отношения между Company и Contact и Address будут выражаться с использованием ограничений внешнего ключа, чтобы такие вещи, как CASCADE DELETE , работали? (Я предполагаю, что это означает, что я не могу иметь поле OwnerTable в адресе).

Я использую SQL Server 2005.

Заявлено:
– У каждой компании может быть много адресов
– У каждого контакта может быть много адресов

Это также, по-видимому, означает, что каждый адрес может повторно использоваться несколько раз:
– В каждом адресе может быть много компаний / контактов

Если это так, то вам действительно нужна таблица ссылок, позволяющая много: много отношений. И в вашем случае у меня будет таблица ссылок для Company (CompanyID, AddressID) и таблица ссылок для Contact (ContactID, AddressID).

Вы можете настроить такие вещи, чтобы удаление адреса удаляло все соответствующие записи в таблицах ссылок. Но для удаления и адреса, если удалены все сопоставленные компании и контакты, для этого потребуется триггер.

Если адрес фактически используется только один раз, и вы явно хотите удалить Компанию / Контакт для удаления связанных адресов …
1. Снова используйте триггер
2. У вас есть таблица ContactAddress и CompanyAddressTable

Я не знаю никаких трюков, которые позволят одной таблице использовать внешний ключ для двух разных таблиц и позволяют обеим основным таблицам каскадировать удаление в одну внешнюю таблицу. Это явно запрещено в SQL Server для предотвращения каскадных удалений по круглым ссылкам.

Должен ли автоматический каскад работать, если общий адрес? Вы можете использовать триггер INSTEAD OF DELETE для правильной реализации этого специального каскада.

  • Как указать столбец, который будет уникальным в области отношений в SQL Server 2008?
  • SQL Server: как проверить, установлено ли в поле ограничение «NULL» или «NOT NULL»?
  • отсроченная проверка ограничений
  • SQL-ограничение E-Mail
  • столбец с заданным значением длины
  • Как узнать, является ли CONSTRAINT_NAME основным или внешним ключом?
  • Добавить столбец в таблицу с ограничениями
  • Изменение ограничения столбца null / not null = ошибка репликации строкиguid
  • SQL Server, самореферентные данные, как добавить ограничение для этого
  • Разница между использованием или отсутствием ключевого слова CONSTRAINT на SQL Server
  • Хорошо ли использовать контрольные ограничения для бизнес-правил
  • Interesting Posts

    Получение списка моих менеджеров, за исключением немногих из них, используя идентификатор моего сотрудника

    Найти символы, отличные от ASCII, в столбцах varchar с помощью SQL Server

    Триггер Inserted и Deleted сменного первичного ключа (SQL Server)

    Хотите отобразить данные из двух отдельных столбцов в один столбец

    Сохранение данных на SQL Server, правильный подход

    Ошибка при вычитании столбцов в SQL

    Разница между .NET, OLEDB и Native Providers в SSIS

    EF ToTraceString SQL столбцы результатов генерации SQL

    SQL Server понимает SCOPE_IDENTITY ()

    Получение текущего системного времени в SQL Server

    Счет транзакции после EXECUTE указывает несоответствующее число операторов BEGIN и COMMIT. Предыдущий счетчик = 1, текущий счет = 2

    Параллелизм при длительном обновлении в TSQL

    T-SQL – Как искать n-й символ в строке

    Полное внешнее соединение по одному критерию, внутреннее соединение на другом

    SQL-группа не может найти правильную фразу

    Давайте будем гением компьютера.