2009-06-17 2 views
1

장바구니에는 재고를 추적해야하며 여기에는 특성이있는 재고가 포함됩니다. 예를 들어필드를 원자 적으로 유지하도록 테이블을 구성하는 방법은 무엇입니까?

이 필드는 현재 데이터베이스에 콤마로 분리하고 다음과 같이 ID가 될
shirt 
-- blue, small = 50 
-- blue, medium = 22 
-- blue, large = 53 
-- red, small = 15 
etc... 

:

각 번호 3 = 작은 (1 = 파란색 특정 속성을 나타내는
1,3 
1,4 
1,5 
2,3 

). 문제는이 다음 데이터가 데이터베이스에없는 원자와 같이 작업하기가 매우 어려워진다 있다는 것입니다,하지만 난 같은 항목의 무한히 많은 조합이있을 수 있기 때문에, 테이블을 구성하는 방법을 생각할 수 없다 :

blue, small, long-sleeved 

누구든지이 정보를 데이터베이스에 저장하는 더 좋은 방법을 제안 할 수 있습니까? 내가 조회 테이블을 사용하여 생각했지만이 속성의 다양한 숫자로 인해 작동하지 않을 것이다.

+0

갖고 계신 특성은 무엇입니까? 나는 이진 솔루션에 대해 모든 비트가 –

+0

속성에 얼마나 많은 속성이 있다고 생각 하는가? –

+0

잠재적으로 많은 문제가 발생할 수 있습니다. 숫자는 임의로 – xenon

답변

4

표 : 셔츠 {shirt_id}

테이블 : ShirtAttributeDefinitions {은 attribute_id, attribute_description}

테이블 :

이 방법, 당신이 기록을 추가하여 새로운 ShirtAttributes을 정의 유지할 수 ShirtAttribute {shirt_id,은 attribute_id} 표 : ShirtAttributeDefinitions.

예 :

당신이이 셔츠가 : {shirt_id : 1}, {shirt_id : 2}

당신이 다섯 셔츠 속성 : {은 attribute_id : 1, attribute_description : 블루}, {은 attribute_id : 2, attribute_description : small}, {attribute_id : 3, attribute_description : ladies}, {attribute_id : 4, attribute_description : red}, {attribute_id : 5, attribute_description : men}

첫 번째 셔츠는 파란색 작은 숙녀입니다. 셔츠, 두 번째는 빨간 망 셔츠입니다. 따라서 ShirtAttribute 테이블에는 다음과 같은 recrods가 있습니다.

{shirt_id : 1, attribute_id : 1}, {shirt_id : 1, attribute_id : 2}, {shirt_id : 1, attribute_id : 3}, {shirt_id : 2, attribute_id : 4}, {shirt_id : 2, attribute_id : 5}

이 방법을 사용해도 Shirt 테이블의 속성 필드를 만드는 것이 가장 좋습니다. 이렇게하면 셔츠에 '남성'과 '여성'속성이 모두 없는지 확인할 수 있습니다. 이 방법은 귀하의 질문에 엄격하게 따르는 더러운 접근 방법입니다.

주.

+0

+1입니다. 사실 RDBMS에서이 작업을 수행하는 "가장 깨끗한"방법입니다. 나중에 스키마를 변경하지 않고도 새 속성을 추가 할 수 있습니다.그러나 당신이 말했듯이, 불행하게도 제약을 행사할 수있는 기회를 놓치게됩니다. –

+0

참으로. 장바구니와 같은 일반적인 응용 프로그램은 실제로이 generatlity가 필요하지 않습니다 ... 또는 그래서 나는 느낍니다. – jrharshath

+0

"셔츠"테이블은 셔츠가 의미하는 것처럼 제품 테이블을 말하는 것입니까? 잠재적으로 많은 유형의 제품이있을 수 있습니다. – xenon

1

속성 테이블에 어떤 문제가 있습니까?

create table Attributes (
    Id int not null identity etc, 
    CartItemId int not null foreign-key etc, 
    Name nvarchar(32), 
    Value nvarchar(32) 
) 

?

+0

사실, 이것이 제가 추천하는 방법이 될 것입니다. 물론,이 방법은 관련성을 잃게됩니다. – jrharshath

+0

여러 속성에 대한 재고 유지 문제를 해결하지 못합니다. 속성 테이블은 "Small"& "Blue"를 가질 수 있지만 "Small Blue"셔츠를 위해 재고를 유지해야합니다. – xenon

+0

@ [크세논] : 작은 파란색이 "작은 파란색"과 다른 점을 설명하십시오 –

관련 문제