2012-08-28 2 views
0

제품 빌드를위한 기능이 추가되었습니다.제품 빌더 용 SQL DB 설계

예를 들어 사용자는 평범한 값 (높이, 색 등) 또는 기존 제품 (가구에 대해 손잡이를 선택할 수 있음) 중 하나 인 다른 속성을 구성 할 수 있습니다.

저는 현재 DB 디자인을 구성 중이며 제안을 찾고 있습니다. 내가 생각해내는 것은 다음과 같다.

제품 - 기존 제품 테이블 예 : ProductA

ParentProducts - idParentProduct 예 : ProductB

ParentProduct_Attributes - idParentProduct, idAttribute, 유형 (제품/값) 예 : 높이, 손잡이

ParentProduct_Attribute_Values ​​ - idAttribute, idValue, 값 예 : 10 "

ParentProduct_Attribute_ChildProducts - idAttribute, idChildProduct, 유형 (등록. 제품/어린이 제품) 예 : ChildProductA, ProductA

ChildProducts - idChildProduct

이 바로 실제 속성 값을 얻기 위해 많은 단계처럼 보인다.

예를 들어, 제품 B (ProductB)가 있습니다. ProductB에는 높이와 손잡이가 있습니다. 높이 선택은 10 ", 12"(값)이며, 손잡이의 선택은 ChildProductA, ProductA (제품)입니다. 각 제품은 서로 다른 테이블에서 제공됩니다. ChildProductA는 하위 제품이며 ProductA는 일반 제품이므로 두 개의 별도 표가 있습니다.

이 모든 입력은 무엇입니까? 다른 아이디어?

희망이 분명했습니다.

감사합니다.

+0

각 제품에 '깊이'라는 명확한 계층 구조가 있습니까? 즉, 각 어린이는 하나의 부모에게 속해 있습니까? 아니면 어린이 제품에 다른 어린이가있을 수 있습니까? – TelJanini

+0

지금은 한 단계 아래로 가정 해 보겠습니다. 제품에 그랜드 어린이가있을 수 없습니다. – Rivka

답변

0

나는 다음과 같은 구조를 제안 :

Products - idProduct, type (Regular/Parent/Child) 
Product_Attributes - idAttribute, idProduct 
Product_Attributes_Values - idValue, idAttribute, value, idProduct 

만 3 테이블에 남아있는이 방법. Product_Attributes_Values 테이블의 필드는 valueidProduct이며 모두 NULL- 가능합니다. value이 설정되면 간단한 값입니다. idProduct이 설정되면 이는 제품이므로 Products의 외래 키 여야합니다.

일반, 부모 및 자식 제품 간의 유형 차별화는 type 필드에서 Products을 통해 이루어집니다. 필요한 경우 데이터베이스 외부의 응용 프로그램에서 추가 검사 및/또는 유효성 검사를 수행 할 수 있습니다.

0

값 (ParentProduct_Attribute_Values)에 대한 별도의 테이블을 만드는 대신 하나의 테이블에 있어야합니다. 비정규 화는 일부 조건에서 쿼리를 고정하는 데 도움이됩니다. 모든 조인에 대해 하나의 조인이 감소하므로 선택 값 테이블을 선택하십시오.