기본 키 대신 두 개의 외부 키
혹시 기본 키가 없는 테이블을 만들 수 있는 가능성이 있는지 궁금합니다. 외국 키 쌍이 항상 다른 두 개의 외국 키가 있는 테이블을 만들 수 있을까요?예를 들면, 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
'programing' 카테고리의 다른 글
Oracle/SQL의 ROWID 데이터 유형 (0) | 2023.10.16 |
---|---|
양식 제출 버튼 "rails way"를 비활성화하는 방법? (0) | 2023.10.11 |
jQuery ajax post를 사용하여 여러 확인란을 전달하는 방법 (0) | 2023.10.11 |
Angular Js : ng-repeat에서 처음과 마지막 요소를 찾고 특별한 클래스를 추가하는 방법은? (0) | 2023.10.11 |
복합 기본 키를 외부 키로 사용 (0) | 2023.10.11 |