집 >데이터 베이스 >MySQL 튜토리얼 >정규화된 데이터베이스 설계는 어떻게 EAV(엔티티-속성-값) 모델의 대안으로 제품 변형을 효과적으로 모델링할 수 있습니까?
제품 변형 모델링
제품 변형을 모델링하려고 하는데 EAV(엔티티 속성 값) 사용에 대해 몇 가지 우려가 있었습니다. 고려할 수 있는 대체 디자인은 다음과 같습니다.
정규화된 디자인
다음 디자인은 제품 변형에 대한 데이터 구조를 정규화합니다.
+---------------+ +-----------------+ | PRODUCTS |-----< PRODUCT_VARIANTS | +---------------+ +-----------------+ | #product_id | | #product_id | | product_name | | #variant_id | +---------------+ | sku_id | | +-----------------+ | | +--------^--------+ +--------^--------+ | PRODUCT_OPTIONS |-----< VARIANT_VALUES | +-----------------+ +-----------------+ | #product_id | | #product_id | | #option_id | | #variant_id | +--------v--------+ | #option_id | | | value_id | +-----------------+ +--------v--------+ | OPTIONS | | +-----------------+ | | #option_id | | | option_name | | +-----------------+ | | | +-------^-------+ | | OPTION_VALUES |---------------+ +---------------+ | #option_id | | #value_id | | value_name | +---------------+
기본, 고유 및 외국 키:
PRODUCTS - PK: product_id - UK: product_name OPTIONS - PK: option_id - UK: option_name OPTION_VALUES - PK: option_id, value_id - UK: option_id, value_name - FK: option_id REFERENCES OPTIONS (option_id) PRODUCT_OPTIONS - PK: product_id, option_id - FK: product_id REFERENCES PRODUCTS (product_id) - FK: option_id REFERENCES OPTIONS (option_id) PRODUCT_VARIANTS - PK: product_id, variant_id - UK: sku_id - FK: product_id REFERENCES PRODUCTS (product_id) VARIANT_VALUES - PK: product_id, variant_id, option_id - FK: product_id, variant_id REFERENCES PRODUCT_VARIANTS (product_id, variant_id) - FK: product_id, option_id REFERENCES PRODUCT_OPTIONS (product_id, option_id) - FK: option_id, value_id REFERENCES OPTION_VALUES (option_id, value_Id)
작동 방식
이 디자인을 사용하면 옵션과 해당 값을 독립적으로 정의할 수 있어 유연성이 향상됩니다. 미래에 새로운 옵션이나 가치를 추가하기 위해.
샘플 데이터
다음은 질문의 스프레드시트를 기반으로 이러한 테이블에 데이터를 입력할 수 있는 방법의 예입니다.
PRODUCTS ======== product_id product_name ---------- ------------ 1 Widget 1 2 Widget 2 3 Widget 3 OPTIONS ======= option_id option_name --------- ----------- 1 Size SL 2 Color 3 Size SM 4 Class 5 Size ML OPTION_VALUES ============= option_id value_id value_name --------- -------- ------------ 1 1 Small (Size SL) 1 2 Large (Size SL) 2 1 White (Color) 2 2 Black (Color) 3 1 Small (Size SM) 3 2 Medium (Size SM) 4 1 Amateur (Class) 4 2 Professional (Class) 5 1 Medium (Size ML) 5 2 Large (Size ML) PRODUCT_OPTIONS =============== product_id option_id ---------- --------- 1 1 (Widget 1; Size SL) 1 2 (Widget 1; Color) 2 3 (Widget 2; Size SM) 3 4 (Widget 3; Class) 3 5 (Widget 4; Size ML) PRODUCT_VARIANTS ================ product_id variant_id sku_id ---------- ---------- ------ 1 1 W1SSCW (Widget 1) 1 2 W1SSCB (Widget 1) 1 3 W1SLCW (Widget 1) 1 4 W1SLCB (Widget 1) 2 1 W2SS (Widget 2) 2 2 W2SM (Widget 2) 3 1 W3CASM (Widget 3) 3 2 W3CASL (Widget 3) 3 3 W3CPSM (Widget 3) 3 4 W3CPSL (Widget 3) VARIANT_VALUES ============== product_id variant_id option_id value_id ---------- ---------- --------- -------- 1 1 1 1 (W1SSCW; Size SL; Small) 1 1 2 1 (W1SSCW; Color; White) 1 2 1 1 (W1SSCB; Size SL; Small) 1 2 2 2 (W1SSCB; Color; Black) 1 3 1 2 (W1SLCW; Size SL; Large) 1 3 2 1 (W1SLCW; Color; White) 1 4 1 2 (W1SLCB; Size SL; Large) 1 4 2 2 (W1SLCB; Color; Black) 2 1 3 1 (W2SS; Size SM; Small) 2 2 3 2 (W2SM; Size SM; Medium) 3 1 4 1 (W3CASM; Class; Amateur) 3 1 5 1 (W3CASM; Size ML; Medium) 3 2 4 1 (W3CASL; Class; Amateur) 3 2 5 2 (W3CASL; Size ML; Large) 3 3 4 2 (W3CPSM; Class; Professional) 3 3 5 1 (W3CPSM; Size ML; Medium) 3 4 4 2 (W3CPSL; Class; Professional) 3 4 5 2 (W3CPSL; Size ML; Large)
장점
단점
결론
이 정규화된 설계는 모델링을 위한 EAV의 실행 가능한 대안입니다. 제품 변형. 유연성, 확장성 및 데이터 무결성을 제공하는 동시에 쿼리도 상대적으로 쉽습니다. 그러나 EAV와 정규화 간의 구체적인 선택은 애플리케이션의 특정 요구 사항과 장단점을 기반으로 이루어져야 합니다.
위 내용은 정규화된 데이터베이스 설계는 어떻게 EAV(엔티티-속성-값) 모델의 대안으로 제품 변형을 효과적으로 모델링할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!