, 을 추가하여 t1
에 주어진 행의 테이블 이름을 지정하십시오.
실제 SQL 외래 키 제약 조건을 선언 할 수 없다는 문제가 있습니다. SQL에 외래 키가없는 경우 지원되지 않습니다. 곱하기 참조 대상. 다른 문제도 있지만 참조 무결성의 부재는 이미 거래 차단 자입니다.
CREATE TABLE t1 (
vehicle_id INTEGER NOT NULL,
FOREIGN KEY (vehicle_id) REFERENCES identifiable(id)
...
);
: 다음
t1
기준이 슈퍼 테이블을
CREATE TABLE Identifiable (
id SERIAL PRIMARY KEY
);
:
더 나은 디자인은 모두 car
및 motor
의 공통의 슈퍼의 OO 디자인에서 개념을 빌려하는 것입니다
또한 하위 유형이 상위 상위 유형을 참조하도록하십시오. 하위 유형의 기본 키는 이 아니며 자동 증가입니다. 상위 수퍼 유형은 새 ID 값을 할당하며 자식은 그 값만 참조합니다.
CREATE TABLE car (
id INTEGER NOT NULL,
FOREIGN KEY (id) REFERENCES identifiable(id)
...
);
CREATE TABLE motor (
id INTEGER NOT NULL,
FOREIGN KEY (id) REFERENCES identifiable(id)
...
);
이제 진정한 참조 무결성을 확보 할 수있을뿐만 아니라 자체 속성이있는 여러 하위 유형 테이블을 지원할 수 있습니다.
@Quassnoi 의해 답
또한
이산 아형을 적용하는 방법을 도시한다. 즉,
car
과
motor
이 상위 상위 유형 테이블의 동일한 행을 참조하지 못하게하려합니다. 이 작업을 수행 할 때
Identifiable.id
에 대해 단일 열 기본 키를 사용하고
UNIQUE
키를
Identifiable.(id, type)
이상으로 선언합니다.
car
및
motor
의 외래 키는 기본 키 대신 2 열 고유 키를 참조 할 수 있습니다.
'identifiable'을위한 대리 키는 질의가 선택해야하는'식별 가능한 '속성이있는 경우에만 유효합니다. '식별 가능'만이 제약 조건을 시행하는 역할을하는 경우 복합 키를 사용하면 쿼리에서 경쟁 키를 제거 할 수 있습니다. – Quassnoi
필자는 '공통적 인 상위 유형'접근법을 사용하여 주요 시스템 마이그레이션/재개발 프로젝트에서 성공적으로 사용했습니다. (뉴질랜드 정부, MoE를위한 SPOT25) –