Rumah > pangkalan data > tutorial mysql > Bagaimanakah reka bentuk pangkalan data yang dinormalkan boleh memodelkan varian produk secara berkesan sebagai alternatif kepada model Entiti-Atribut-Nilai (EAV)?

Bagaimanakah reka bentuk pangkalan data yang dinormalkan boleh memodelkan varian produk secara berkesan sebagai alternatif kepada model Entiti-Atribut-Nilai (EAV)?

Susan Sarandon
Lepaskan: 2024-12-06 07:01:12
asal
414 orang telah melayarinya

How can a normalized database design effectively model product variants as an alternative to the Entity-Attribute-Value (EAV) model?

Memodelkan Varian Produk

Anda cuba memodelkan varian produk dan mempunyai sedikit kebimbangan tentang menggunakan EAV (Entity-Attribute-Value). Berikut ialah reka bentuk alternatif yang boleh anda pertimbangkan:

Reka Bentuk Normal

Reka bentuk berikut menormalkan struktur data untuk varian produk:

+---------------+     +-----------------+
| 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   |
 +---------------+
Salin selepas log masuk

Utama, Unik dan Asing Kunci:

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)
Salin selepas log masuk

Cara Ia Berfungsi

  • PRODUK mengandungi maklumat produk asas seperti nama.
  • PILIHAN menyenaraikan pilihan yang tersedia, seperti Saiz atau Warna.
  • OPTION_VALUES memegang nilai pilihan tertentu, seperti Kecil atau Merah.
  • PRODUCT_OPTIONS memetakan pilihan yang dikaitkan dengan produk.
  • PRODUCT_VARIANTS menyimpan varian produk sebenar bersama-sama dengan SKU mereka.
  • VARIANT_VALUES memautkan varian kepada nilai pilihannya.

Reka bentuk ini membolehkan anda menentukan pilihan dan nilainya secara bebas, menjadikannya fleksibel untuk ditambah pilihan atau nilai baharu pada masa hadapan.

Sampel Data

Berikut ialah contoh cara anda boleh memasukkan data dalam jadual ini berdasarkan hamparan dalam soalan anda:

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)
Salin selepas log masuk

Kelebihan

  • Memberikan fleksibiliti dan skalabiliti yang lebih besar.
  • Memudahkan membuat pertanyaan dengan mengelakkan gabungan yang kompleks.
  • Menguatkuasakan integriti data melalui kunci asing.

Kelemahan

  • Memerlukan lebih banyak jadual berbanding EAV .
  • Mungkin melibatkan reka bentuk pangkalan data yang lebih kompleks dan penyelenggaraan.

Kesimpulan

Reka bentuk normal ini merupakan alternatif yang berdaya maju kepada EAV untuk memodelkan varian produk. Ia menawarkan fleksibiliti, skalabiliti dan integriti data sementara juga agak mudah untuk ditanya. Walau bagaimanapun, pilihan khusus antara EAV dan normalisasi hendaklah dibuat berdasarkan keperluan khusus dan pertukaran permohonan anda.

Atas ialah kandungan terperinci Bagaimanakah reka bentuk pangkalan data yang dinormalkan boleh memodelkan varian produk secara berkesan sebagai alternatif kepada model Entiti-Atribut-Nilai (EAV)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan