带FK和级联的ref表

带FK和级联的ref表

  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)
  );

在创建参考表时出现错误...

  

在表“ contacts_addresses”上引入FOREIGN KEY约束“ FK ___ CONTactS_ADDRESSES#address_id ___ ADRESSES#id”可能会导致循环或多个级联路径。指定ON DELETE NO actION或ON UPDATE NO actION,或修改其他FOREIGN KEY约束。
  无法创建约束或索引。

我认为这是因为两个父表都与CLIENTS表链接在一起,但是为什么那不可能呢?

  1. 例如我希望删除客户记录,然后再删除联系人以及客户地址。如果发生这种情况,引用的记录(匹配的contact_id和address_id)也应删除。

  2. 例如我希望删除一个联系人记录,然后删除所有带有该contact_id的引用记录。

  3. 例如我希望删除一个地址记录,然后删除所有带有该address_id的引用记录。

但是如何?

kankan07 回答:带FK和级联的ref表

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3145421.html

大家都在问