>데이터 베이스 >MySQL 튜토리얼 >내 EAV 기반 제품 변형 데이터베이스 디자인이 건전하고 확장 가능하며 정규화되어 있습니까? 아니면 대체 관계형 디자인이 더 나은 쿼리 및 성능을 제공합니까?

내 EAV 기반 제품 변형 데이터베이스 디자인이 건전하고 확장 가능하며 정규화되어 있습니까? 아니면 대체 관계형 디자인이 더 나은 쿼리 및 성능을 제공합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-29 14:01:11921검색

Is my EAV-based product variant database design sound, scalable, and normalized, or does the alternative relational design offer better querying and performance?

제품 변형 모델링

문제

제품 변형을 모델링하려고 하는데 EAV(엔티티 속성 값)가 필요할 수 있다고 생각합니다. 디자인은 다음과 같습니다.

PRODUCT      -> 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   |
 +---------------+

디자인이 건전한지, 쿼리 및 확장성 문제가 있는지, 정규화되었는지 알고 싶습니다.

디자인 고려 사항

제품 변형 모델링의 목표는 크기, 색상, 소재 등 다양한 변형이 있을 수 있는 제품을 표현하는 것입니다. 각 변형은 일반적으로 고유한 SKU(Stock Keeping Unit)와 연결됩니다.

다음은 EAV를 사용하지 않는 대체 디자인입니다.

+---------------+     +---------------+
| PRODUCTS      |-----< PRODUCT_SKUS  |
+---------------+     +---------------+
| #product_id   |     | #product_id   |
|  product_name |     | #sku_id       |
+---------------+     |  sku          |
        |             |  price        |
        |             +---------------+
        |                     |
+-------^-------+      +------^------+
| OPTIONS       |------< SKU_VALUES  |
+---------------+      +-------------+
| #product_id   |      | #product_id |
| #option_id    |      | #sku_id     |
|  option_name  |      | #option_id  |
+---------------+      |  value_id   |
        |              +------v------+
+-------^-------+             |
| OPTION_VALUES |-------------+
+---------------+
| #product_id   |
| #option_id    |
| #value_id     |
|  value_name   |
+---------------+

기본 키(PK), 고유 키(UK) 및 외래 키 (FK):

  • 제품

    • PK: product_id
    • 영국: product_name
  • OPTIONS

    • PK: product_id, option_id
    • UK: product_id, option_name
  • OPTION_VALUES

    • PK: product_id, option_id, value_id
    • UK: product_id, option_id , value_name
    • FK: (product_id, option_id)는 OPTIONS(product_id, option_id)
  • PRODUCT_SKUS

      PK: product_id, sku_id
    • UK: sku_id
    • FK: product_id 참조 PRODUCTS(제품_ID)
  • SKU_VALUES

      PK: product_id, sku_id, option_id
    • FK: (product_id, sku_id) 참조 PRODUCT_SKUS(product_id, sku_id)
    • FK: (product_id, option_id)는 OPTIONS(product_id, option_id)를 참조합니다
    • FK: (product_id, option_id, value_id)는 OPTION_VALUES(product_id, option_id, value_id)
데이터 예

제공된 스프레드시트의 다음 데이터 사용:

+-----------+----------+---------+----------+----------+
| ProductId | Product  | Size    | Color    | Class    |
+-----------+----------+---------+----------+----------+
| 1         | Widget 1 | Small   | White    | null     |
| 1         | Widget 1 | Small   | Black    | null     |
| 1         | Widget 1 | Large   | White    | null     |
| 1         | Widget 1 | Large   | Black    | null     |
| 2         | Widget 2 | Small   | null     | null     |
| 2         | Widget 2 | Medium  | null     | null     |
| 3         | Widget 3 | Medium  | null     | Amateur  |
| 3         | Widget 3 | Large   | null     | Amateur  |
| 3         | Widget 3 | Medium  | null     | Professional |
| 3         | Widget 3 | Large   | null     | Professional |
+-----------+----------+---------+----------+----------+
데이터는 표는 다음과 같습니다.

위 내용은 내 EAV 기반 제품 변형 데이터베이스 디자인이 건전하고 확장 가능하며 정규화되어 있습니까? 아니면 대체 관계형 디자인이 더 나은 쿼리 및 성능을 제공합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.