내가 워크 벤치로 데이터베이스 모델을 생성하고 다음 표를 작성하고 함께 이미 인덱스 컬럼에 외래 키를 생성.는 MySQL의 워크 벤치
내가 그들에 외래 키 제약 조건을 생성, 워크 벤치가 자동으로 두 개의 인덱스를 추가합니다
CREATE TABLE IF NOT EXISTS `Database`.`table1` (
`idtable1` INT NOT NULL ,
`uniquecolumn` INT NOT NULL ,
PRIMARY KEY (`idtable1`) ,
UNIQUE INDEX `UniqueIndex` (`uniquecolumn` ASC) ,
INDEX `FKOne` (`idtable1` ASC) , //here
INDEX `FKTwo` (`uniquecolumn` ASC) , //(I don't want this!)
CONSTRAINT `FKOne`
FOREIGN KEY (`idtable1`)
REFERENCES `Database`.`table2` (`idtable2`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `FKTwo`
FOREIGN KEY (`uniquecolumn`)
REFERENCES `Database`.`table2` (`idtable2`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
내가 가진
(위의 내 모델에 외래 키를 추가 한 후 미래 설계 스크립트입니다) 네 개의 색인이 있습니다. 외래 키 열이 순서에서 첫 번째 열로 나열되어 인덱스가 있어야합니다, 참조하는 테이블에서
:
이것은 MySQL을 참조 설명서의 말씀입니다. 이러한 색인은 이 없으면 참조하는 테이블에 자동으로 만들어집니다.
그래서 나는 기본 키와 같은 순서로 같은 열에 고유 인덱스가 이미 존재하기 때문에 인덱스 FKOne
및 FKTwo
을 만들 필요가 없다 이해한다. 그러나 MySQL Workbench에서는 인덱스 FKOne
과 FKTwo
을 삭제할 수 없습니다. 그리고 나는 이것을 할 수 있어야한다고 생각합니다 :
CREATE TABLE IF NOT EXISTS `Database`.`table1` (
`idtable1` INT NOT NULL ,
`uniquecolumn` INT NOT NULL ,
PRIMARY KEY (`idtable1`) ,
UNIQUE INDEX `UniqueIndex` (`uniquecolumn` ASC) ,
CONSTRAINT `FKOne`
FOREIGN KEY (`idtable1`)
REFERENCES `Database`.`table2` (`idtable2`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `FKTwo`
FOREIGN KEY (`uniquecolumn`)
REFERENCES `Database`.`table2` (`idtable2`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
제가 맞습니까? 이 코드가 작동할까요? Workbench로 할 수있는 방법이 있습니까? (포워드 엔지니어링 전에 마지막 두 순간을 삭제하는 것 외에는).
또는 아마도 MySQL은 완전히 중복 된 인덱스를 만들지 않아도 될만큼 똑똑하기 때문에 걱정할 필요가 없습니다 ...?
두 열 모두 실제로 동일한 테이블의 동일한 열을 참조합니까? 아니면 오타가 있습니까? –
예, 동일한 테이블에서 동일한 열을 참조하므로 참조 된 열을 업데이트하기 전에 행을 삭제해야합니다! 그러나이 질문과는 아무런 관련이 없습니다. 어쩌면 다른 예를 선택해야했을 것입니다. – Dil
아니요, 괜찮습니다. 부모 - 자식 계층을 정의 할 때처럼 2 개의 열이 동일한 열을 참조하는 것이 일반적입니다. 고유 한 제약 때문에 잠시 혼란스러워졌습니다. (그리고 그런데, 나는 Workbench와 동일한 문제도 가지고 있었다). –