복합 기본 키 참조
두 개의 테이블이 있고 각 테이블에는 복합 기본 키가 있습니다.
두 개의 복합 기본 키 모두에 하나의 특성이 있습니다.
공통 속성을 어떻게 참조해야 합니까?아래 두 표 모두 FK로 표기하면 되나요?아래의 cust_id 및 flight_id는 복합 키의 각 부분이며 다른 테이블의 기본 키를 참조합니다.(결국 복합 키를 사용하기로 선택했기 때문에 br_flight 테이블에 대한 erd의 세 번째 속성은 무시합니다.)
CREATE TABLE BOOKING_REFERENCE (
REFERENCE_ID NVARCHAR(10) NOT NULL,
CUST_ID NUMBER(10)NOT NULL,
STATUS NVARCHAR (1), NOT NULL,
PRIMARY KEY(REFERENCE_ID, CUST_ID),
FOREIGN KEY(REFERENCE_ID) REFERENCES BR_FLIGHT(REFERENCE_ID):
FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(CUST_ID);
CREATE TABLE BR_FLIGHT (
REFERENCE_ID NVARCHAR(10) NOT NULL ,
FLIGHT_ID NVARCHAR (10) NOT NULL,
PRIMARY KEY(REFERENCE_ID, FLIGHT_ID),
FOREIGN KEY (REFERENCE_ID) REFERENCES BOOKING_REFERENCE(REFERENCE_ID)
FOREIGN KEY (FLIGHT_ID) REFERENCES FLIGHT(FLIGHT_ID)
);
위의 SQL이 작동합니까?미리 감사드리며, 부실한 다이어그램에 대해 사과드립니다:)
외부 키는 열에 대해 열을 참조하는 기본/고유 키와 일치해야 합니다.의 기본 키 이후로BOOKING_REFERENCE
는(REFERENCE_ID
,CUST_ID
), 즉, 외부 키가BR_FLIGHT
로.BOOKING_REFERENCE
또한 두 개의 열로 구성되어야 합니다.즉, 다음을 추가해야 합니다.CUST_ID
에게BR_FLIGHT
테이블 - 그것 또는 당신의.BOOKING_REFERENCE
기본 키가 잘못되었으며 다음과 같이 해야 합니다.REFERENCE_ID
).
그렇긴 하지만, 당신처럼 외국 키를 양방향으로 정의하는 것은 말이 안 됩니다."하위" 표는 "상위"를 참조해야 하며, 그 반대는 아닙니다.
복합 기본 키를 외부 키와 함께 참조할 때는 전체 키를 참조해야 합니다.이 경우 BR_FLITY 테이블을 변경하고 CUST_ID 열을 추가해야 합니다.
ALTER TABLE BR_FLIGHT
ADD
(
CUST_ID NUMBER(10)NOT NULL
);
그리고 전체 키를 다음과 같이 참조합니다.
FOREIGN KEY (REFERENCE_ID, CUST_ID) REFERENCES BOOKING_REFERENCE (REFERENCE_ID, CUST_ID)
이제 BR_FLITY 테이블의 DDL은 다음과 같습니다.
CREATE TABLE BR_FLIGHT (
REFERENCE_ID NVARCHAR(10) NOT NULL ,
CUST_ID NUMBER(10)NOT NULL,
FLIGHT_ID NVARCHAR (10) NOT NULL,
PRIMARY KEY(REFERENCE_ID, FLIGHT_ID),
FOREIGN KEY (REFERENCE_ID, CUST_ID) REFERENCES BOOKING_REFERENCE (REFERENCE_ID, CUST_ID)
);
Tony Andrews가 지적했듯이 BOOKING_REFERENCE 테이블의 외부 부품은 필요하지 않습니다.다음과 같이 표시되어야 합니다.
CREATE TABLE BOOKING_REFERENCE (
REFERENCE_ID NVARCHAR(10) NOT NULL,
CUST_ID NUMBER(10)NOT NULL,
STATUS NVARCHAR (1), NOT NULL,
PRIMARY KEY(REFERENCE_ID, CUST_ID)
);
당신은 그것을 넣어야 합니다.UNIQUE
제한 사항:
CREATE TABLE BOOKING_REFERENCE (
REFERENCE_ID NVARCHAR(10) NOT NULL UNIQUE,
CUST_ID NUMBER(10)NOT NULL,
STATUS NVARCHAR (1), NOT NULL,
PRIMARY KEY(REFERENCE_ID, CUST_ID),
FOREIGN KEY(REFERENCE_ID) REFERENCES BR_FLIGHT(REFERENCE_ID):
FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(CUST_ID);
CREATE TABLE BR_FLIGHT (
REFERENCE_ID NVARCHAR(10) NOT NULL ,
FLIGHT_ID NVARCHAR (10) NOT NULL,
PRIMARY KEY(REFERENCE_ID, FLIGHT_ID),
FOREIGN KEY (REFERENCE_ID) REFERENCES BOOKING_REFERENCE(REFERENCE_ID)
FOREIGN KEY (FLIGHT_ID) REFERENCES FLIGHT(FLIGHT_ID)
);
언급URL : https://stackoverflow.com/questions/16323676/referencing-a-composite-primary-key
'programing' 카테고리의 다른 글
ON 키워드 없이 INNER JOIN이 가능한가요? (0) | 2023.07.11 |
---|---|
각도2:잡히지 않음(약속):구성 요소에서 평가!에 대한 견적이 지원되지 않습니다. (0) | 2023.07.11 |
Oracle이 여기에 숨겨진 열을 추가하는 이유는 무엇입니까? (0) | 2023.07.06 |
WEB-INF 폴더가 Spring Boot 응용 프로그램에 생성되지 않습니까? (0) | 2023.07.06 |
TypeScript에서 생성자를 데코레이터로 올바르게 감싸는 방법 (0) | 2023.07.06 |