0

사람과 회사 정보를 수집하는 간단한 주소록이 있습니다.외래 키 제약 조건을 만들 수 없습니다.

CREATE TABLE [dbo].[Contact] (
    [ID]  INT   IDENTITY (1, 1) NOT NULL, 
    ... 
    CONSTRAINT [PK_Contatto] PRIMARY KEY CLUSTERED ([ID] ASC) 
); 

CREATE TABLE [dbo].[Person] (
    [ID]   INT   IDENTITY (1, 1) NOT NULL, 
    [IdContact] INT   NOT NULL, 
    [IdCompany]  INT   NULL, 
    ... 
    CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([ID] ASC), 
    CONSTRAINT [FK_Person_Company] FOREIGN KEY ([IdCompany]) REFERENCES [dbo].[Company] ([ID]) ON DELETE SET NULL ON UPDATE CASCADE, 
    CONSTRAINT [FK_Person_Contact] FOREIGN KEY ([IdContact]) REFERENCES [dbo].[Contact] ([ID]) ON DELETE CASCADE ON UPDATE CASCADE 
); 

CREATE TABLE [dbo].[Company] (
    [ID]   INT   IDENTITY (1, 1) NOT NULL, 
    [IdContact] INT   NOT NULL, 
    ... 
    CONSTRAINT [PK_Company] PRIMARY KEY CLUSTERED ([ID] ASC), 
    CONSTRAINT [FK_Company_Contact] FOREIGN KEY ([IdContact]) REFERENCES [dbo].[Contact] ([ID]) ON DELETE CASCADE ON UPDATE CASCADE 
); 

은 기본적으로 누군가는 그와 관련된 사람/회사 연락처를 삭제하면 삭제됩니다 원하는 : 그래서 나는 다음 3 개 테이블과 연락을 연결 이메일, PHONENUMBER, 주소와 같은 다른 사람이있다. 또한 누군가가 회사와 관련된 회사를 삭제하면 해당 회사의 IdCompany를 null로 설정해야합니다.

"루프 생성 또는 추가 전파 경로 작성"으로 인해 만들 수없는 제약 조건은 FK_Person_Contact입니다.

무엇이 누락 되었습니까?

답변

0

Person 테이블이 Contact 테이블과 Company 테이블을 참조하고 Company 테이블도 Contact 테이블을 참조하기 때문에 '루프 생성'이 의심 스럽습니다.

개인 레코드와 회사 레코드가 다른 연락처 레코드를 참조 할 수 있습니까?

사람 A -> 회사 A - -> 연락처 B

을 또는 사람의 기록 및 회사 기록 참조 같은 연락해야>는 에게 연락?

사람 A ->에게 문의 -> 회사 A ->하는 것은

어떻게 연락, 사람 및 회사의 관계가 정의 연락처?

  • 1 연락처에 많은 사람이 있습니까?
  • 1 연락처가 많은 회사가 있습니까?
  • 1 인물이 많습니까?
  • 1 사람은 1 회사를 가지고 있습니까?
  • 1 사람이 많은 회사가 있습니까?
  • 1 회사에 많은 연락처가 있습니까?
  • 1 회사에 많은 사람이 있습니까?

제대로 관계를 모델링하기 위해 하나 이상의 링크 테이블에 대해 생각할 필요가있을 수 있습니다.

+0

연락처는 개인이나 회사를 지칭합니다. 그래서 사람과 회사는 동일한 연락처를 참조 할 수 없습니다. 여러 주소/전화 번호/이메일에 연락하려면 연결되어 있어야합니다. Person.IdCompany는 회사를 참조 할 수 있습니다 (해당 회사에서 작동하는 회사 인 경우). Person.IdCompany를 회사 테이블 대신 회사의 담당자에게 직접 연결해야합니까? – DkSw

+0

Person과 Person to Company에 연락하는 것이 더 나을 것입니다. 즉, 연락처는 회사에서 근무할 수도 있고 근무하지 않을 수도있는 사람입니다. 연락처는 사람을 통해 회사에 연결됩니다. 개인 - 회사 링크에서 회사에 연결된 모든 인물을 계속 찾을 수 있습니다. –

+0

죄송합니다. 그렇게 할 수 없습니다. 이 주소록은 임대 서비스에 속한 더 큰 데이터베이스에 연결되어 있으므로 담당자는 모든 참조 담당자가없는 회사 만 참조 할 수 있습니다. 연락처는 자동차를 빌린 사람 또는 자동차를 빌린 회사의 연락처 일 수 있습니다. 사람은 회사에서 가끔씩 일할 수도 있지만 사적인 용도로도 자동차를 빌릴 수 있습니다. 내가 한 말에 대해 어떻게 생각하니? FK와 FK는 회사 연락처를 통해서만 FK에 연락하고 지금은 그렇지 않습니다.따라서 더 이상 삼각 측량은 아니지만 모두 Contact 테이블을 "V"패턴으로 통과합니다. 합법? – DkSw

관련 문제