對產品變體進行建模
您正在嘗試對產品變體進行建模,並對使用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中文網其他相關文章!