2008-10-16 4 views
9

궁금한데, 외래 키 쌍이 항상 다른 두 개의 외래 키가있는 기본 키가없는 테이블을 만들 수 있습니까? 예를 들어 및 warehouse_id을 외장 키로 사용하는 STOCK 테이블은 ITEMSWAREHOUSES 테이블입니다. 따라서 동일한 품목이 다른 창고에있을 수 있습니다. 테이블보기 :기본 키 대신 외래 키 두 개

item_id warehouse_id quantity 
10  200   1000 
10  201   3000 
10  202   10000 
11  200   7000 
11  202   2000 
12  203   5000 

또는 자동 증가 또는 무언가로 사용하지 않는 기본 키 필드를 만들어야합니까? 데이터베이스가 oracle입니다.

감사합니다.

답변

3

예는 복합 기본 키

0

당신이 그것을 필요로 쿼리의 모든 종류의 일을하지 않는 경우, 당신은하지 필요 기본 키라고합니다. 그것은 기록을 모호하지 않게 삭제하는 것이 조금 더 어렵습니다. Oracle에서 허용하는 경우 item_id, warehouse_id에 고유 제한 조건을 적용 할 수 있습니다. 내가 선호하는

ALTER TABLE [dbo].[RepresentativeData] 
add CONSTRAINT [UK_Representative_repRecID_AppID] unique (repRecID,AppId) 
go 

: 당신이 2 열에 고유 제한 조건을 추가 할 수 있습니다> 디자이너보기에서 두 열을 클릭 PK에

를 클릭하거나 :

4

두 열을 기본 키를 만들 수 있습니다 값이 다른 테이블에 존재하도록 강제하기 때문에 복합 기본 키.

+0

복합 기본 키는 외래 키 제약 조건을 적용하지 않습니다 ... –

0

"사용되지 않은"기본 키 필드를 만들려면 이 없지만 종종 더 단순합니다. (Paul T가 지적했듯이, 행을 삭제하려면 두 필드를 모두 지정해야합니다.)

종종 제한된 유틸리티를 분명히하기 위해 이러한 열의 이름을 "PK"로 지정합니다.

0

모두가 말한 것처럼 2 열에서 기본을 만들 수 있습니다. 인공 자동 증가 열을 만들 필요가 없습니다.

또한 외래 키는 기본 키와 다른 용도로 사용됩니다. 따라서 기본 키를 2 개의 외래 키로 바꿀 수는 없습니다. 이처럼

6

:

가 이것에 대한 복합 기본 키 아무 문제가 없습니다 만, 어쨌든 하나의 기본 키 열을 생성하는 대부분의 상황에서 아마 쉽게
create table stock 
(item_id  references items(item_id) 
, warehouse_id references warehouses(warehouse_id) 
, quantity  number(12,2) not null 
, constraint stock_pk primary key (item_id, warehouse_id) 
); 
1

. 특정 하드웨어 제약이없는 한, pk col은 성능 및 유지 보수 용이성을 향상시킬 수 있습니다.

모델에 깔끔하게 맞지 않는 상황이 발생할 수 있음을 고려해야합니다. 예를 들어, 현재 알고있는 주식을 보유하고 있지만 현재 어느 창고인지, 운송 중인지, 아직 할당되지 않은지 등은 알지 못합니다. 복합 기본 키에 맞게 비즈니스 규칙을 작성하거나 기본 키 열을 대신 사용해야합니다.