2009-11-12 4 views
1

설치 :
reviewer_id (기타 포함) 열을 가진 documents 테이블이 하나 있습니다.
users이라는 테이블과 user_id이라는 테이블이 있습니다.Access 2007 1 대 2 열 참조 무결성

일대 다 user_idauthor_id 사이의 하나의 참조 무결성 링크를 만들어야합니다.
user_idreviewer_id 사이의 일대 다.

즉, documents의이 두 열은 서로 독립적이지만 값은 모두 user_id이어야합니다.

이러한 관계 중 하나를 추가하면 정상적으로 작동합니다. Edit Relationships 창에 두 번째 관계를 추가하려고하면 Access에서 다음 메시지로 인해 불평합니다.

Microsoft Office Access는이 관계에 대해 참조 무결성을 적용 할 수 없습니다.

검색했지만 찾지 못했습니다. 이 관계를 구성하는 방법에 대한 아이디어가 있습니까?

+0

USER_ID 사용자의 기본 키입니까? – JeffO

+0

위의 내용을 만들었으며 아무런 문제가 없는데 세부 사항이 누락 되었습니까? 확실하지 Gratzy는 의견에 무엇을 최대 온 - – Gratzy

+0

은 CHECK 제약 조건 또는 테이블 유효성 검사 규칙이 그 author_id <> reviewer_id을 확인하는 것을 잊지 마십시오. – onedaywhen

답변

6

한 테이블의 두 개의 개별 관계를 다른 테이블의 두 개의 다른 필드에 추가하려면 관계 창에 상위 테이블의 인스턴스가 여러 개 있어야합니다.

그래서 사용자 및 문서 테이블을 관계 창에 추가하고 첫 번째 관계를 만듭니다. 그런 다음 사용자 테이블을 관계 창에 두 번째로 추가하고 (Users_1로 별칭 지정)이 별칭이 지정된 복사본의 두 번째 관계를 추가합니다.

이것은 QBE에서 두 개의 조인을 정의하는 것과 완전히 동일하므로 문제가되지 않는다고 말하고 싶습니다. 그러나 반드시 분명하지는 않습니다!

+0

+1) – JeffO

+0

그게 어떻게 작동하는지, 고마워! 그 다음에 신속한 질문을합니다. "관계 편집"창에서 어떤 상황에서 여러 행을 사용합니까? 액세스 UI 도구 : – vknlksr

+0

한 당신을위한 두 번째 별칭 테이블을 작성합니다. – onedaywhen

1

이 귀하의 질문에 직접 대답은 아니지만, 내가 너라면이 세 번째 테이블을 만들어 DocumentsUsers 사이의 복잡한 대다 관계를 구현하는 또 다른 데이터 모델을 사용에는 다음과 같은 필드 DocumentsUsers라고 :

PK documentUser_id (*) 
FK document_id 
FK user_id 
    documentUser_type 

(*) or you could alternatively use document_id + user_id as a PK... 

가 documentUser_type 필드가 같은 책, 즉 '사용자', '검토'는 등이 모델을 사용하여, 당신이 할 수있는 관계 유형을 개최, 여러 사용자 및/또는 여러 검토, 현실에 더 가깝습니다. '작성자'와 같은 다른 관계 유형을 가질 수도 있습니다.

0

먼저 각각의 참조 user_id을 명확하게하기 위해 열 이름을 author_user_idreviewer_user_id으로 각각 변경하는 것이 좋습니다.

둘째, Access UI 도구 사용은 의무 사항이 아니라는 점을 알아야합니다. 우리 중 많은 사람들이 직관적이지 못하다고 생각하지만 행복하게 대안이 있습니다. 하나는 SQL DDL을 사용하는 것입니다. ANSI-92 Query Mode :

ALTER TABLE Documents ADD 
    CONSTRAINT fk__ document_author_user_id__Users 
    FOREIGN KEY (author_user_id) 
    REFERENCES Users (user_id) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
; 

ALTER TABLE Documents ADD 
    CONSTRAINT fk__ reviewer_user_id__Users 
    FOREIGN KEY (reviewer_user_id) 
    REFERENCES Users (user_id) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
; 

셋째, 당신이 CHECK 제약이 필요할 수 있습니다 (또는 표 [원문] 유효성 검사 규칙) 사용자를 보장하기 위해, 예를 들어 자신의 작업을 검토 할 수 없습니다 고려

ALTER TABLE Documents ADD 
    CONSTRAINT document_author_cannot_review_their_own_work 
    CHECK (author_user_id <> reviewer_user_id) 
;