我昨天发布了这个问题并没有得到答案。 我在这里附上我的问题样本。我想创建这个DB:
CREATE DATABASE [TRYShemen];
GO
USE [TRYShemen]
GO
CREATE TABLE Persons(
ID VARCHAR(50) PRIMARY KEY,
FullName VARCHAR(50) NOT NULL
);
CREATE TABLE Class(
ClassNum VARCHAR(30) PRIMARY KEY,
Teacher VARCHAR(50) NOT NULL,
constraint Class_FK foreign key (Teacher) references Persons (ID) ON DELETE NO ACTION ON UPDATE CASCADE,
);
CREATE TABLE Students(
StudentID VARCHAR(50) ,
ClassNum VARCHAR(30)
constraint Students_PK PRIMARY KEY (StudentID, ClassNum),
constraint Students_FK foreign key (StudentID) references Persons(ID) ON DELETE NO ACTION ON UPDATE CASCADE ,
constraint Students_FK1 foreign key (ClassNum) references Class(ClassNum) ON DELETE NO ACTION ON UPDATE CASCADE
);
我收到错误:
Introducing FOREIGN KEY constraint 'Students_FK1' on table 'Students' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
我知道如果我将'Students_FK1'更改为ON CASCADE NO ACTION,它会起作用,但它不是我的目标。我希望如果'Person'的id将更新,它也将在Students表中更新。
我该如何解决?
谢谢!!
答案 0 :(得分:2)
请注意,它表示“可能导致循环或多个级联路径”。如果您通过ER图表执行删除操作,您可能会发现删除操作通过多个路径级联到同一个表。
在这种情况下,想象同一个人既是班级中的老师又是学生。是的,我知道,这是一个逻辑错误,但如果这个条件为真,那么对该人的更新将通过两条路线级联到学生表。
答案 1 :(得分:2)
那么你能做些什么呢?
将此结构视为替代方案。
表人员
表学生
表教师
表类
表Classes_to_Teachers
table-Classes_to_Students
然后你可以为中心提供级联参考
人员 - >学生&学生 - > Classes_to_Students
人员 - >教师&教师 - > Classes_to_Teachers
当您访问数据时,您将有更多连接来获取一个类的所有数据。 但是限制应该成功。