예, 두 테이블만으로 두 테이블간에 세 번째 정규형 일대 다 관계를 형성 할 수는 없습니다. 당신 은 형성 할 수있는 일대 진정한 대다, 당신은 같은 것을 필요로 (두 방향 중 하나)하지만 얻기 위해 :
Item
id primary key
description
Category
id primary key
description
ItemCategory
itemid foreign key references Item(id)
categoryid foreign key references Category(id)
을 당신은 범주가 필요하지 않습니다 항목 테이블에 여기에 해당하지 않는 항목에 대한 권한있는 범주가없는 경우 나는 또한 조인 테이블에 이미 "진짜"고유 키가있을 때 불필요한 기본 키를 도입하는 것을 크게 좋아하지 않습니다. 항목 ID와 범주 ID가 이미 고유하다는 사실은 ItemCategory 테이블의 전체 레코드도 고유하다는 것을 의미합니다.
표준 도구를 사용하여 ItemCategory 테이블의 성능을 모니터링하기 만하면됩니다.
- 가 사용하는 쿼리에 따라
- 카테고리 ID
- (상품 ID, 카테고리 ID)
- (카테고리 ID, 상품 ID)
을 항목 ID : 당신이 중 하나 이상에 인덱스를 요구할 수있다 데이터를 조인 할 수 있습니다 (그리고 복합 인덱스 중 하나가 기본 키가됩니다).
전체 작업에 대한 실제 구문의 라인을 따라 다음과 같습니다 신원/자동 증가 컬럼으로 ID 열을 만드는 등 고려해야 할 것들의
create table Item (
id integer not null primary key,
description varchar(50)
);
create table Category (
id integer not null primary key,
description varchar(50)
);
create table ItemCategory (
itemid integer references Item(id),
categoryid integer references Category(id),
primary key (itemid,categoryid)
);
있어 다른 종류의,하지만 직접 아니다 수중에있는 질문과 관련이 있습니다.
mapping_id가별로 필요하지 않습니다. 매핑은 항목과 범주에 의해 고유하게 표현되므로 기본 키 (함께)와 외래 키 (각 혼자)의 쌍을 단순하게 만들 수 있습니다. –
@Max, 필자가 정기적으로 볼 수있는 많은 관계가 종종 하나의 숫자 식별자를 사용하는 것이 유익한 습관의 힘입니다. –