나는 다음과 같은 SQL 테이블이 있습니다방지 사이클과 여러 캐스케이드 경로
create table dbo.Companies (
Id int identity not null constraint primary key clustered (Id),
);
create table dbo.Workers (
Id int identity not null constraint primary key clustered (Id),
CompanyId int not null,
);
create table dbo.Evaluations (
Id int identity not null constraint primary key clustered (Id),
CompanyId int not null,
WorkerId int not null
)
그리고 다음과 같은 제약 조건 :
alter table dbo.Workers
add constraint FK_Workers_CompanyId foreign key (CompanyId) references dbo.Companies(Id) on delete cascade on update cascade;
alter table dbo.Evaluations
add constraint FK_Evaluations_CompanyId foreign key (CompanyId) references dbo.Companies(Id) on delete cascade on update cascade,
constraint FK_Evaluations_WorkerId foreign key (WorkerId) references dbo.Workers(Id) on delete no action on update no action;
내가 얻을 레코드를 삽입 할 때 내가 엔티티 프레임 워크를 사용 오전 오류 :
Additional information: Introducing FOREIGN KEY constraint 'FK_dbo.Workers_dbo.Companies_CompanyId' on table 'Workers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
데이터베이스 디자인을 변경해야합니까?
내 데이터베이스 이런 식으로 디자인 된 이유를 설명해 드리죠 :1
이 - 노동자 테이블에있는 회사 ID는 노동자 는 현재 작동 회사를 표시합니다.2 - 평가의 CompanyId는 평가가 이루어질 때 작업자가 근무한 위치를 나타냅니다 ... 그리고 WorkerId는 평가 된 작업자를 분명히 나타냅니다.
계단식 설정에는 dbo.Companies의 dbo.Evalutations에 대한 두 개의 경로가 있습니다. 회사 관계로부터 노동자를 분리하는 디자인을 제안하고 타임 스탬프가 적용된 테이블에 이러한 관계를 기반으로하고 평가는 동일한 타임 스탬프가 적용된 테이블의 하위 클래스로 평가하여 "EventType"열을 평가 또는 작업에 대해 평가할 수 있습니다. 새 회사 및 주어진 평가 중 작업자가 작업 한 위치에 대한 뷰는 평가 전의 첫 번째 "변경"레코드로서 타임 스탬프 내림차순으로 정렬됩니다. CompanyID는 FK와 같이 타임 스탬프 테이블에 있어야합니다. –
@JaazCole, 죄송 합니다만 타임 스탬프에 대한 귀하의 제안을 이해하지 못합니다. 코드 예제를 제공해 주시겠습니까? 이해하기 쉽습니다. 고맙습니다. –