programing

기본 키 대신 두 개의 외부 키

lovejava 2023. 10. 11. 20:22

기본 키 대신 두 개의 외부 키

혹시 기본 키가 없는 테이블을 만들 수 있는 가능성이 있는지 궁금합니다. 외국 키 쌍이 항상 다른 두 개의 외국 키가 있는 테이블을 만들 수 있을까요?예를 들면, a.STOCK와 함께 식탁에 앉다item_id그리고.warehouse_id외국 열쇠로서ITEMS그리고.WAREHOUSES탁자들따라서 동일한 품목이 다른 창고에 있을 수 있습니다.테이블 보기:

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

아니면 자동 증분 같은 것으로 사용되지 않는 기본 키 필드를 만들어야 합니까?데이터베이스가 오라클입니다.

감사합니다!

복합 기본 키가 필요합니다.

다음과 같은 경우:

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)
);

두 열에 기본 키를 만들 수 있습니다. 디자이너 뷰에서 두 열을 모두 클릭 > pk를 클릭합니다.

또는 두 개의 열에 고유한 제약 조건을 추가할 수 있습니다.

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

저는 복합 기본 키가 다른 테이블에 값이 존재한다는 것을 강제하기 때문에 선호합니다.

네, 복합 프라이머리 키라고 불립니다.

복합 기본 키는 문제가 없지만 대부분의 상황에서는 단일 기본 키 열을 만드는 것이 더 쉬울 것입니다.특별한 하드웨어 제약 조건이 없는 한 pkcol은 성능과 유지보수 용이성만 개선할 수 있을 것입니다.

모델에 깔끔하게 맞지 않는 상황이 있을 수 있음을 고려하는 것을 잊지 마십시오.예를 들어, 현재 어느 창고에 있는지는 알면서도 현재 알지 못하는 재고, 운송 중이거나 아직 할당되지 않은 재고가 있을 수 있습니다.복합 기본 키에 맞게 비즈니스 규칙을 만들거나 기본 키 열을 대신 사용해야 합니다.

필요한 쿼리를 수행하지 않으면 기본 키가 필요 없습니다.하지만 명확하게 기록을 삭제하는 것은 조금 더 어렵습니다.Oracle에서 허용하는 경우 item_id, warehouse_id에 고유한 제약 조건을 적용할 수 있습니다.

"사용되지 않는" 기본 키 필드를 만들 필요는 없지만 종종 삶을 더 간단하게 만듭니다.(Paul T가 지적한 바와 같이 행을 삭제하려면 두 필드를 모두 지정해야 합니다.

저는 종종 그러한 칼럼의 제한된 유용성을 명확하게 하기 위해 "PK"라는 이름을 붙입니다.

모두가 말했듯이 두 개의 열에서 프라이머리를 만들 수 있습니다.인위적인 자동 증분 열을 만들지 않아도 됩니다.

또한 외국 키는 기본 키와는 다른 용도로 사용된다는 것을 명심해야 합니다.따라서 기본 키를 외국 키 2개로 교체할 수 없습니다.

언급URL : https://stackoverflow.com/questions/208666/two-foreign-keys-instead-of-primary