0

다른 테이블과 관계 테이블을 연결하는 것이 옳은지 알고 싶습니다. PowerDesigner에서 사용해 보았지만 경고 메시지가 나타납니다. 그러나 : 다 대 다 관계에는 "클라이언트"와 "직원"이라는 두 개의 테이블이 있습니다. 주어진 관계 테이블에서 나는 1 대 다수의 다른 두 테이블을 연결했다. 관계 테이블에는 이제 두 개의 기본 키 (스태프의 기본 키와 클라이언트의 기본 키)와 2 개의 외래 키가 있습니다. 올바른 절차입니까? 나는이 상황이 있습니다 enter image description here관계 테이블을 다른 테이블과 연결하는 올바른 절차입니까?

경고 메시지는 다음과 같습니다

종류 확인 객체 위치 표 인덱스 인덱스 포함 인덱스 :: 'GENERATE_RENT_HISTORY_FK는'포함 '임대 history.GENERATE_RENT_HISTORY_PK을 생성 임대료 역사

을 생성

답변

1

테이블에 두 개의 열로 구성된 복합 기본 키가 있고 해당 열의 각각이 외래 키가되는 것이 유효합니다. 외래 키인 다른 열을 사용하는 것도 유효합니다.

저는 PowerDesigner에 익숙하지 않지만, 경고 메시지가 외래 키 제약 조건에 관한 것이 아니라 중복 된 인덱스에 대한 것으로 의심됩니다.

PRIMARY KEY 제약 조건을 지원하려면 UNIQUE INDEX(idstaff,idclient)입니다.

FOREIGN KEY 제약 조건을 지원하려면 선도 열이 idstaff 인 인덱스와 선행 열이 idclient 인 다른 인덱스가 필요합니다.

그러나 (idstaff)의 색인은 중복입니다.

이미 기본 키 인덱스 idstaff의 선행 열이있는 색인이 있습니다.

테이블 정의로,이 두 지수는 staffclient을 참조하는 외래 키 제약 조건을 지원하기에 충분 지금까지 :

다음과 같이 인덱스를 추가 할 필요가 없습니다
PRIMARY KEY (idstaff,idclient) 
KEY generate_rent_history_IX1 (idclient) 

:

KEY generate_rent_history_IX4 (idstaff) 

PowerDesigner에서 해당 중복 인덱스를 생성하도록 지시 받았으며 실제로 인덱스가 필요 없다는 경고 메시지가 표시됩니다.

는 (난 그냥 기본 키의 열 순서에 같은데요. 열이 선도하는 열로 idclient와 다른 방법으로 주위에 있다면, 우리는 idstaff 컬럼에 인덱스 및 idclient에 인덱스를 필요 열이 중복 될 수 있습니다.)

+0

늦게까지 죄송 합니다만 오류는 아니 겠지? MS Access로 내 보내면 제대로 작동합니까? –

+0

아, 두 번째 normail 양식에이 데이터베이스가 있습니까? 나는 관계 테이블이 클라이언트의 순서를 표현한다는 점에 유의해야한다 (관계 테이블은 직원에 의해 취해진 다. 사실 idclient와 idstaff이다. 외래 키는 직원이 작성한 클라이언트의 주문을 나타낸다). –

+0

더 정확하게 말하자면 ,'generate_rent_history'의 기본 키는 * 2 개의 컬럼을 포함합니다. * 복합 * 기본 키입니다. 그 * 두 * 열은 테이블에 대한 * 하나 * 기본 키 제약 조건의 구성 요소입니다. – spencer7593