데이터베이스의 한 행에 대해 일대 다 관계를 올바르게 작성하는 방법을 알아 내려고합니다.여러 개의 일대 다 관계에 대한 스키마가 수정 되었습니까?
전 제품 테이블이 있습니다.
CREATE TABLE `product` (
`productID` int(11) NOT NULL AUTO_INCREMENT,
`productName` varchar(45) NOT NULL,
PRIMARY KEY (`productID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
제품에는 일대일 카테고리 관계 또는 일대 다 대응이있을 수 있습니다.
CREATE TABLE `category` (
`categoryID` int(11) NOT NULL AUTO_INCREMENT,
`categoryName` varchar(45) NOT NULL,
PRIMARY KEY (`categoryID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
내가 외국 키 조회 테이블을 만들었습니다,하지만 난 그것을 여러 다른 카테고리 그룹과 관련된 제품이있을 수 있기 때문에 작업을 거라고 생각하지 않습니다. 내 데이터베이스에 쿼리 수준에 따라 쿼리의 각 높은 수준이 이전 수준에 의존하는
CREATE TABLE `category_to_product` (
`categoryID` int(11) NOT NULL,
`productID` int(11) NOT NULL,
KEY `categoryID` (`categoryID`),
KEY `productID` (`productID`),
CONSTRAINT `category_to_product_ibfk_2` FOREIGN KEY (`productID`)
REFERENCES `product` (`productID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `category_to_product_ibfk_1` FOREIGN KEY (`categoryID`)
REFERENCES `category` (`categoryID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
편집 할 수 있습니다. 수준 1은 기본 수준의 쿼리가되며 가장 일반적인 정보를 포함하므로이 범주는 전자 제품이라고 말할 수 있습니다.
레벨 2 쿼리는 약간 더 세련된 쿼리가 될 것이므로 electronics-> television과 같은 전자 장치의 하위 범주가됩니다. 빵 부스러기로 생각하십시오. 이것은 그 자체로하기가 힘들지만,이 경우 제품은 동일한 레벨 또는 다른 레벨을 포함 할 수있는 몇 가지 다른 카테고리 그룹과 관련 될 수 있어야합니다. 나는 이것이 의미가 있기를 바랍니다.
이 유형의 관계에 대해 데이터베이스를 어떻게 구성합니까? 처음에는 카테고리 테이블을 룩업 테이블의 각기 다른 열에서 분리 시켰습니다. 잘 작동했지만 너무 많은 NULL 값이있었습니다. 그룹에 대한
나는이 문제를 이해하지 못한다. 우선, 이것은 일대 다 관계가 아니라 다 대다 관계 (제품 1에는 많은 카테고리가있을 수 있고 카테고리 빨간색에는 많은 제품이있을 수 있음)입니다. 당신의 접근 방식이 좋아 보인다. 'KEY categoryID (categoryID), KEY productID (productID)'를 결합 된 기본 키인'PRIMARY KEY (productID, categoryID)'로 대체하십시오. 실제로 당신의 질문/문제는 무엇입니까? –
이 작업을 수행하는 방법에 대해 더 많은 연구를 마친 후 필자가 필요로하는 모델은 MYSQL에서 관리하기가 엉망인 것처럼 보이는 계층 구조와 유사합니다. 곧 명확한 설명과 다이어그램으로 질문을 업데이트 할 것입니다. – EternalHour