그 좋은 디자인 연습의 경우는 모르겠지만 확실히 그것을 다른 테이블의 복합 기본 키의 일부인 하나의 테이블의 복합 외래 키를 가질 수 있습니다.
우리가 가지는 test2에 말하는 복합 기본 키 (A가 B)
이제 우리는 테이블 수를 갖는 테이블 TEST1이 말 주키 (P, Q, R) 여기서 (P, Q)의에 test2는 test2의 (A, B)를 참조합니다.
MySql 데이터베이스에서 다음 스크립트를 실행했지만 정상적으로 작동합니다.상술 한 경우
CREATE TABLE `test2` (
`P` INT NOT NULL,
`Q` VARCHAR(2) NOT NULL,
`R` INT NOT NULL,
`S` DATETIME NULL,
`T` VARCHAR(8) NULL,
PRIMARY KEY (`P`, `Q`, `R`),
INDEX `PQ_idx` (`P`,`Q` ASC),
CONSTRAINT `PQ`
FOREIGN KEY (`P`, `Q`)
REFERENCES `test1` (`A`,`B`)
ON DELETE CASCADE
ON UPDATE CASCADE);
CREATE TABLE `test1` (
`A` INT NOT NULL,
`B` VARCHAR(2) NOT NULL,
`C` DATETIME NULL,
`D` VARCHAR(45) NULL,
PRIMARY KEY (`A`, `B`));
는 데이터베이스의 조합 기대 (A를 B) 고유하게 그리고 TEST1 테이블의 기본 키되고있다.
하지만 당신은 다음과 같은 뭔가를하려고하면, 스크립트는 실패합니다. 데이터베이스에서는 test2 테이블을 만들 수 없습니다. 조합이 (A는, B)이 고유 한 경우는 중요하지 않으며 상술 한 사례 데이터베이스의
CREATE TABLE `test2` (
`P` INT NOT NULL,
`Q` VARCHAR(2) NULL,
`R` DATETIME NULL,
`S` VARCHAR(8) NULL,
`T` VARCHAR(45) NULL,
INDEX `P_idx` (`P` ASC),
INDEX `Q_idx` (`Q` ASC),
CONSTRAINT `P`
FOREIGN KEY (`P`)
REFERENCES `test1` (`A`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `Q`
FOREIGN KEY (`Q`)
REFERENCES `test1` (`B`)
ON DELETE CASCADE
ON UPDATE CASCADE);
열 A는 각각 고유 한 기대와 동일한 컬럼 B. 대한 따른다.
어떻게 복합 기본 키를 정의 했습니까? _each_ 열에 고유 제한 조건을 추가 했습니까? – Oded
하지만 각 열이 고유하지 않기를 바랍니다. 고유 한 두 개 또는 세 개의 열의 조합을 원합니다. – Tony
제약 조건을 어떻게 정의했는지 물었습니다. 나는 당신이 그런 식으로 정의해야한다고 말하지 않았다. – Oded