2011-12-06 3 views
2

데이터베이스 (MySQL)에 제품이 있습니다. 내 제품의 다양한 옵션 조합을 기반으로 가격을 책정했습니다. 나는 다음과 같은 데이터가 있습니다제품의 여러 옵션에 대한 데이터베이스 구조

제품

prodID | prodName 
1  | Ball 

옵션

optionID | optionName | prodID 
1  | color  | 1 
2  | size  | 1 
3  | material | 1 

optionValue들을

ovID | optionID | ovValue 
1 | 1  | red 
2 | 1  | blue 
3 | 2  | small 
4 | 2  | big 
5 | 3  | wood 
6 | 3  | glass 
- $ (13) 빨간색 작은 유리 공 - 14 빨간색 큰 나무 공 - 16 빨간색 큰 유리 볼 - 17 파랑 작은 나무 공 - 12.5

빨간색 작은 나무 공 : 가격

I는 다음과 같이하고 싶습니다 [...]

이 용도로 데이터베이스 구조를 어떻게 디자인 할 수 있습니까? 몇 가지 방법을 시도했지만 아무 것도 좋지 않았습니다. 옵션의 수가 정적이라면 모든 옵션은 자체 테이블을 가질 수 있지만 이것은 좋은 해결책이 아닙니다.

답변

1

나는 이미 갖고있는 것을 좋아합니다. 당신이 그렇게 생각하는대로 완전히 유연하게하고 싶다면 다음과 같이하십시오.

두 개 더 추가하십시오.

Product_Instance

instanceID | prodID | price 
1   | 1  | 13 

Product_Instance_Options 당신이 그들에 대한 모든 가능한 조합과 가격을 정의 할 수 있습니다 이러한 방법으로

instanceID | ovID 
1   | 1 
1   | 3 
1   | 6 

. 모든 가격을 설정하는 일은 지옥 일 수도 있지만, 계산할 수 없다면 (glass = + 2 $, small = 2 $/big = 4 $와 같이) 계산할 수 있습니다.

+0

해결책 주셔서 감사합니다 – Ervin

+0

주어진 옵션 배열에 대한 가격을 얻기 위해 어떻게 쿼리 하시겠습니까? – jx12345

+0

위의 내 덧글 질문에 대한 답변 : http://stackoverflow.com/questions/40296781/mysql-select-from-tables-based-on-multiple-rows – jx12345

1

어떻게 이런 일에 대해 :

productTypes

prodID | prodName 
1  | Ball 
2  | Car 

productInstances

prodInstanceID | prodID | Prize 
1    | 1  | $19 
2    | 1  | $50 
3    | 2  | $8 

속성

propertyID | propertyName 
1   | color 
2   | size 
3   | material 

propertiesValues ​​

pvID |propertyID | propertyName 
1 | 1   | red 
2 | 1   | blue 
3 | 2   | small 
4 | 2   | medium 
5 | 2   | large 
6 | 3   | wood 
7 | 3   | glass 

productProperties 설계는 어떤 제품 인스턴스에 속해있는 옵션을 확인할 수 없습니다에서

ppID | prodInstanceID | pvID 
1 | 1    | 1 
2 | 1    | 3 
3 | 1    | 6 
4 | 2    | 2 
5 | 2    | 4 
6 | 2    | 7 
7 | 3    | 1 
8 | 3    | 3 
9 | 3    | 6 

. 테이블 옵션 값을 보면 옵션을 그룹화 할 수 없습니다.

+1

당신은 모든 값을 삽입해야합니다 (예 : 빨간색/작은) 모든 제품의 모든 인스턴스. 데이터베이스에서 "작은"수백 또는 수천 번이라는 단어를 찾을 수 있습니다. 이것은 중복 = 나쁨입니다. 어쨌든 – Flo

+0

, +1 밀접하게 appropiation에 대한 – Ervin

+0

@ 플로, 당신은 바로 그것에 대해. 나는 내 대답을 수정했다. 가격을 productinstance로 이동하고 propertyvalues ​​테이블을 만들었습니다. 편집 : 사실, 이제 내 대답은 당신의 대답과 같습니다. – Iljaas

관련 문제