sql - 将 ON DELETE CASCADE 添加到同一个表中的 2 个外键
问题描述
我这里有 3 个表是它们的 SQL
CREATE TABLE [dbo].[User]
(
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY ,
[Email] VARCHAR(50) NOT NULL unique,
[UserName] VARCHAR (50) NOT NULL Unique,
[Password] VARCHAR(50) NOT NULL,
[FirstName] VARCHAR(50) NOT NULL,
[LastName] VARCHAR(50) NOT NULL,
[PhoneNumber] VARCHAR(50) NOT NULL unique,
[Photo] VARCHAR(MAX) NULL,
[UserType] VARCHAR(50) NOT NULL,
);
CREATE TABLE [dbo].[JobPost]
(
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[ClientId] INT NOT NULL,
[JobType] VARCHAR(50) NOT NULL,
[JobTitle] VARCHAR(50) NOT NULL,
[JobBudget] INT NOT NULL,
[JobDate] VARCHAR(50) NOT NULL,
[JobDes] VARCHAR(500) NOT NULL,
[PropNum] INT NOT NULL DEFAULT 0,
[Rate] FLOAT NOT NULL DEFAULT 0,
[Approved] INT NOT NULL DEFAULT 0,
[Taken] INT NOT NULL DEFAULT 0,
CONSTRAINT [FK_JobPost_ToTable] FOREIGN KEY ([ClientId]) REFERENCES [User]([Id]) ON DELETE CASCADE
);
CREATE TABLE [dbo].[Proposal] (
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[JobId] INT NOT NULL,
[FreelancerId] INT NOT NULL,
[Approved] INT NOT NULL DEFAULT 0,
CONSTRAINT [FK_Proposal_ToTable] FOREIGN KEY ([JobId]) REFERENCES [dbo].[JobPost] ([Id]),
CONSTRAINT [FK_Proposal_ToTable_1] FOREIGN KEY ([FreelancerId]) REFERENCES [dbo].[User] ([Id]) ON DELETE CASCADE
);
当我删除用户记录或职位发布记录时,我想删除提案表中的一条记录,但我不能在它说的两个外键上都使用 DELETE CASCADE
表 'Proposal' 上的 FOREIGN KEY 约束 'FK_Proposal_ToTable' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
我希望桌子是这样的
CREATE TABLE [dbo].[Proposal] (
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[JobId] INT NOT NULL,
[FreelancerId] INT NOT NULL,
[Approved] INT NOT NULL DEFAULT 0,
CONSTRAINT [FK_Proposal_ToTable] FOREIGN KEY ([JobId]) REFERENCES [dbo].[JobPost] ([Id]),
CONSTRAINT [FK_Proposal_ToTable_1] FOREIGN KEY ([FreelancerId]) REFERENCES [dbo].[User] ([Id]) ON DELETE CASCADE
);
解决方案
推荐阅读
- fortran - MPI 以正确的方式分散 3D 阵列是否需要转置?
- c++ - 使用仅安装了 Visual Studio 2017 的系统构建 Visual Studio 2010 C++ 项目
- sql - 如何开始一个 DBMS 项目
- docker - XDEBUG 无法正常工作,但已安装并且日志显示“连接到客户端 :-)”
- html - 如何使用 Tabulator.js 计算时间
- ruby-on-rails - 如何修复 Rails Geocoder 中的错误“未定义方法”?
- tensorflow - TensorFlow 对象检测 API:如何隔离主干网络?
- javascript - 循环无限嵌套对象并构造字符串
- javascript - sinon依赖函数伪造
- sap - 通过将 SAP 表拆分为小块来复制它