Справочная таблица с ФК и каскадом - PullRequest
0 голосов
/ 07 ноября 2019

enter image description here

  CREATE TABLE [clients] (
    id UNIQUEIDENTIFIER NOT NULL
      CONSTRAINT PK___CLIENTS#id
        PRIMARY KEY NONCLUSTERED,
    name NVARCHAR(250) NOT NULL
      CONSTRAINT UQ___CLIENTS#name
        UNIQUE (name)
  );
  CREATE TABLE [contacts] (
    id UNIQUEIDENTIFIER NOT NULL
      CONSTRAINT PK___CONTACTS#id
        PRIMARY KEY NONCLUSTERED,
    client_id UNIQUEIDENTIFIER NOT NULL
      CONSTRAINT FK___CONTACTS#client_id___CLIENTS#id
        FOREIGN KEY REFERENCES [clients] (id)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
    name NVARCHAR(250) NOT NULL
      CONSTRAINT UQ___CONTACTS#name$client_id
        UNIQUE (name, client_id)
  );
  CREATE TABLE [addresses] (
    id UNIQUEIDENTIFIER NOT NULL
      CONSTRAINT PK___ADDRESSES#id
        PRIMARY KEY NONCLUSTERED,
    client_id UNIQUEIDENTIFIER NOT NULL
      CONSTRAINT FK___ADDRESSES#client_id___CLIENTS#id
        FOREIGN KEY REFERENCES [clients] (id)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
    name NVARCHAR(250) NOT NULL
      CONSTRAINT UQ___ADDRESSES#name$client_id
        UNIQUE (name, client_id)
  );
  CREATE TABLE [contacts_addresses] (
    contact_id UNIQUEIDENTIFIER NOT NULL
      CONSTRAINT FK___CONTACTS_ADDRESSES#contact_id___CONTACTS#id
        FOREIGN KEY REFERENCES [contacts] (id)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
    address_id UNIQUEIDENTIFIER NOT NULL
      CONSTRAINT FK___CONTACTS_ADDRESSES#address_id___ADDRESSES#id
        FOREIGN KEY REFERENCES [addresses] (id)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
    CONSTRAINT PK___CONTACTS_ADDRESSES#contact_id$address_id
      PRIMARY KEY (contact_id, address_id)
  );

Я получаю ошибку при создании справочной таблицы ...

Введение ограничения FOREIGN KEY 'FK ___ CONTACTS_ADDRESSES # address_id ___ ADRESSES # id' в таблице 'contacts_addresses' может привести к циклам или нескольким каскадным путям. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
Не удалось создать ограничение или индекс.

Я думаю, это потому, что обе родительские таблицы связаны с таблицей CLIENTS. , но почему это невозможно?

  1. например, я хочу удалить запись клиента, затем следует удалить контакты, а также адреса клиента. В этом случае также должны быть удалены ссылочные записи (соответствующие contact_id & address_id).

  2. например, если я хочу удалить запись контакта, то все ссылочные записи с этим contact_id должны быть удалены.

  3. например, я хочу удалить запись адреса, тогда все записи, на которые есть ссылки с этим address_id, должны быть удалены.

Но как?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...