2014-01-22 1 views
1

의 원인이 '테이블 aaaIsChildOf에 FOREIGN KEY 제약 조건을 소개 :간단한 예 - 나는 간단한 <strong>A가 B에 SQL에서</strong> 관계를 따라 구현하기 위해 노력 사이클 또는 여러 개의 계단식 경로

IF OBJECT_ID ('dbo.AdependsonB', 'U') IS NOT NULL 
     DROP TABLE dbo.AdependsonB; 
IF OBJECT_ID ('dbo.aaaPerson', 'U') IS NOT NULL 
     DROP TABLE dbo.aaaPerson; 

CREATE TABLE aaaPerson 
(
    [id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [name] VARCHAR(40) 
) 

CREATE TABLE AdependsonB 
(
    [IsChildOf] INT NOT NULL, 
    [Parent] INT NOT NULL, 
    CONSTRAINT [pk_AdependsonB] PRIMARY KEY ([IsChildOf],[Parent]), 
    CONSTRAINT [CHK_identity] CHECK ([IsChildOf] <> [Parent]), 
    CONSTRAINT [FK_AdependsonB_IsChildOf-aaaPerson_id] FOREIGN KEY ([IsChildOf]) REFERENCES aaaPerson(id) ON DELETE CASCADE, 
    CONSTRAINT [FK_AdependsonB_Parent-aaaPerson_id] FOREIGN KEY ([Parent]) REFERENCES aaaPerson(id) ON DELETE CASCADE, 
) 

코드 줄을 실행 사이클 또는 여러 개의 계단식 경로

의 원인이 '테이블 aaaAdependsonB에'FOREIGN KEY constraint'FK_AdependsonB_Parent-aaaPerson_id 소개

: 나는 다음과 같은 오류가 발생했습니다

외래 키 제약 조건에서 "ON DELETE CASCADE"을 생략하면 코드가 완벽하게 실행되지만 의미 상 정확하지는 않습니다.

아무도 그러한 경우 왜 조언을 줄 수 있습니까? 이 문제와 관련하여 이미 많은 내용을 읽었지만 해결 방법 없이는 이러한 간단한 관계를 구현할 수없는 이유가 없습니다. 나는 아버지가 아들을 많이 얻을 수있는 시나리오의 어떤 종류를 입력하고 아들을 삭제에주의를 취할 조언

+0

관련 항목 : http://stackoverflow.com/questions/21243365/resolve-cycles-and-multiple-cascade-paths –

+0

왜 자식 테이블에 IsChildOf와 Parent가 모두 필요합니까? 이 두 가지가 어떻게 다른지 설명해 주시겠습니까? 부모는 정말로 "상위 부모"입니까? 그리고이 관계를보다 간단하게 표현할 수는 없습니다. 당신은 항상 계층 적 경로를 따라 가기 부모에게 다가 갈 수 있어야합니다. 이 모든 정보를 단일 표에 포함시킬 수 있습니다. –

답변

0

사전에

많은 감사 아버지의 삭제를 발생시키고 그 모든 아들이 삭제 될 수 있도록 (여기서 루프를 볼 수 있습니까?).

이러한 종류의 논리는 비즈니스 계층에 놓여 있으며 처리가 더 잘됩니다 (모든 형제를 삭제하고 아버지를 삭제 함).

구문 분석기가 적합하지 않거나 합리적이지 않은 경우 중복 된 [IsChildOf] 및 [부모] 열이있는 여러 개의 계단식 경로 사이클을 생성 할 가능성이 있습니다.

자체 참조 FK를 사용할 수 없습니까? 달성하고자하는 것은 무엇입니까?