SQL Server ON DELETE CASCADE错误

时间:2022-07-23 03:37:54

I'm designing a database schema, and I'm stuck on one part. Below is a simplified version of my schema. Could someone please explain why the following SQL:

我正在设计一个数据库模式,我只是坚持一个部分。下面是我的架构的简化版本。有人可以解释为什么以下SQL:

CREATE TABLE Users (
  UserID INT NOT NULL PRIMARY KEY,
  FName VARCHAR(64) NOT NULL,
  LName VARCHAR(64) NOT NULL,
  UName VARCHAR(64) NOT NULL UNIQUE,
  PWord CHAR(32) NOT NULL,
  Role VARCHAR(13) NOT NULL
);

...

CREATE TABLE Sale (
  SaleID INT NOT NULL PRIMARY KEY,
  Book INT NOT NULL REFERENCES Books(BookID) ON DELETE NO ACTION,
  Merchant INT NOT NULL REFERENCES Users(UserID) ON DELETE CASCADE,
  Upload DATETIME NOT NULL,
  Sold BIT NOT NULL,
  Price DECIMAL(10, 2) NOT NULL,
  Condition VARCHAR(9) NOT NULL,
  Written BIT NOT NULL,
  Comments VARCHAR(8000) NULL
);

...

CREATE TABLE Purchases (
  PurchaseID INT NOT NULL PRIMARY KEY,
  Buyer INT NOT NULL REFERENCES Users(UserID) ON DELETE CASCADE,
  Merchant INT NOT NULL REFERENCES Users(UserID) ON DELETE NO ACTION,
  Sale INT NOT NULL REFERENCES Sale(SaleID) ON DELETE CASCADE UNIQUE,
  Time DATETIME NOT NULL
);

... results in this error, and how I can overcome it:

...导致此错误,以及我如何克服它:

Msg 1785, Level 16, State 0, Line 38
Introducing FOREIGN KEY constraint 'FK__Purchases__Sale__25869641' on table
'Purchases' may cause cycles or multiple cascade paths. Specify ON DELETE
NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

I would like to keep the ON DELETE CASCADE for the Purchases.Sale attribute, if possible.

如果可能的话,我想为Purchases.Sale属性保留ON DELETE CASCADE。

Thank you for your time.

感谢您的时间。

1 个解决方案

#1


4  

Most likely it's because you reference "Users" from two different tables - Buyer in Purchases and Merchant in Sale. The database probably doesn't realize that these two records are never the same - but it knows that it's the same table and therefore complains about a potential issue with cascading.

很可能是因为您从两个不同的表中引用“用户” - 买方采购和销售商户。数据库可能没有意识到这两个记录永远不会相同 - 但它知道它是同一个表,因此抱怨级联的潜在问题。

#1


4  

Most likely it's because you reference "Users" from two different tables - Buyer in Purchases and Merchant in Sale. The database probably doesn't realize that these two records are never the same - but it knows that it's the same table and therefore complains about a potential issue with cascading.

很可能是因为您从两个不同的表中引用“用户” - 买方采购和销售商户。数据库可能没有意识到这两个记录永远不会相同 - 但它知道它是同一个表,因此抱怨级联的潜在问题。