2012-12-24 2 views
1

이 테이블을 사용해야하는 다른 테이블에서 사용하는 테이블입니다. 따라서, 많은 양의 사용을 상상해보십시오.MySql - 외래 키 제약 조건이있는`SortOrder` 테이블 만들기?

delimiter $$ 

CREATE TABLE `sortorder` (
    `sortOrderId` int(11) NOT NULL AUTO_INCREMENT, 
    `sortOrder` tinyint(4) NOT NULL, 
    PRIMARY KEY (`sortOrderId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 

이 테이블이로드되는 모든 것을 처리 할 수 ​​있도록하려면 무엇이 필요합니까? 나는 메뉴의 10 개 탭 또는 5 개 썸네일 이미지 등이있는 경우

난 단지 예를 들어 sortOrder에 대한 tinyint datatype를 필요로 상상할 수있는, 당신은 우리가 여기에 큰 INT의 데이터 유형을 필요가 없을 것입니다 볼 수 있습니다.

내가 배워야 할 다른 것은이 테이블에 외래 키 제약 조건을 설정 한 것입니다.

예를 들어 image 테이블이 sortOrderId 인 레코드를 삭제하는 경우 일치하는 레코드는 sortorder 테이블에서 삭제해야합니다.

어떻게 처리하나요?

ALTER TABLE의 SORTORDER 코드 :

ALTER TABLE sortorder ADD FOREIGN KEY fk_sortorder; 

이 표 SORTORDER 코드를 생성 :

... 

** 편집합니다 sortOrderId 열을 사용하여 image 테이블. image 테이블에서 레코드가 삭제 된 경우 sortorder 테이블에서 해당 레코드가 삭제된다는 것을 반드시 확인해야합니다.

delimiter $$ 

CREATE TABLE `image` (
    `imageId` int(11) NOT NULL AUTO_INCREMENT, 
    `imageFileName` varchar(45) DEFAULT NULL, 
    `imagePath` varchar(255) DEFAULT NULL, 
    `imageTitle` varchar(100) DEFAULT NULL, 
    `imageAlt` varchar(100) DEFAULT NULL, 
    `imageWidth` int(11) DEFAULT NULL, 
    `imageHeight` int(11) DEFAULT NULL, 
    `classId` int(11) DEFAULT NULL, 
    `imageSizeId` tinyint(4) NOT NULL, 
    `isImageEnabled` bit(1) DEFAULT b'0', 
    `sortOrderId` int(11) DEFAULT NULL, 
    PRIMARY KEY (`imageId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 

답변

1

가 높은 카디널리티가있을 경우 정렬에 선택합니다 열을 indexes를 사용하는 빠른이 테이블을 만들기 위해 키입니다. 이 키에 높은 수준의 차이가 있다고 생각되면 sortOrder에 키를 추가해야합니다.


이 (가) cascade delete이 필요합니다 얻으려면 :

ALTER TABLE sortorder 
    add CONSTRAINT fk_sortOrderId 
    FOREIGN KEY (sortOrderId) 
    REFERENCES image(sortOrderId) 
    ON DELETE CASCADE 

나는 sortOrder에 인덱스가 매우 효과적이지 않을 것이라 생각합니다. 이것은 인덱스가 구성되는 BTree 데이터 구조의 특성 때문입니다. 그것에 대해 생각하면 sortOrder의 대부분의 값은 1-10의 낮은 숫자 일 가능성이 높습니다. 분산이 작 으면 색인의 이점이 사라집니다.

복합 색인을 사용하는 것이 더 나을 것 같습니다.

CREATE INDEX `sort_index` on `sortorder` (`sortOrderId`, `sortOrder`) 

당신은 정말이의 느낌을 얻기 위해 런타임 동안 성능을 모니터링해야한다는 데이터베이스의 대부분을 얻을 수있는 올바른 방법이다, 난 단지 추측하고있다.

+0

외부 키를 만들고 설정하는 데 사용해야하는 ALTER TABLE 구문이 있습니까? – JoJo

+1

@jojo foreign key? 난 당신이 단지'인덱스'를 원한다고 생각한다. http://dev.mysql.com/doc/refman/5.0/en/create-index.html 외래 키인 경우 다른 테이블을 게시해야한다. –

+0

'CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name' - 어떤 종류의 INDEX가'sortOrder'가되어야합니까? – JoJo

관련 문제