Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Desain Tabel Entitas-Atribut-Nilai

Saya akan menawarkan pendapat yang bertentangan dengan sebagian besar komentar tentang pertanyaan ini. Sementara EAV adalah JAHAT untuk semua alasan yang dapat Anda temukan secara menyeluruh dijelaskan berkali-kali di sini di SO dan DBA.SE dan di tempat lain, ada satu aplikasi yang sangat umum yang sebagian besar hal yang salah dengan EAV sebagian besar tidak relevan dan (beberapa) keuntungan dari EAV sangat erat. Aplikasi tersebut adalah katalog produk online.

Masalah utama dengan EAV adalah bahwa ia tidak membiarkan database melakukan apa yang benar-benar baik dilakukan, yang membantu memberikan konteks yang tepat untuk atribut informasi yang berbeda tentang entitas yang berbeda dengan mengaturnya dalam skema . Memiliki skema memberikan banyak keuntungan dalam mengakses, menafsirkan, dan menegakkan integritas data Anda.

Fakta tentang katalog produk adalah bahwa atribut suatu produk hampir seluruhnya tidak relevan dengan sistem katalog diri. Sistem katalog produk melakukan (paling banyak) tiga hal dengan atribut produk.

  1. Menampilkan atribut produk dalam daftar kepada pengguna akhir dalam bentuk:{nama atribut}:{nilai atribut}.

  2. Menampilkan atribut beberapa produk dalam kisi perbandingan di mana atribut produk yang berbeda berbaris satu sama lain (produk biasanya kolom, atribut biasanya baris)

  3. Mendorong aturan untuk sesuatu (misalnya harga) berdasarkan kombinasi atribut/nilai tertentu.

Jika semua yang dilakukan sistem Anda adalah memuntahkan informasi yang secara semantik tidak relevan (untuk sistem) maka skema untuk informasi ini pada dasarnya tidak membantu. Sebenarnya skema menghalangi dalam katalog produk online, terutama jika katalog Anda memiliki banyak jenis produk yang beragam, karena Anda selalu harus kembali ke skema untuk mengotak-atiknya guna memungkinkan kategori produk atau jenis atribut baru.

Karena cara penggunaannya, bahkan tipe data dari nilai atribut dalam katalog produk tidak selalu (sangat) penting. Untuk beberapa atribut, Anda mungkin ingin menerapkan batasan, seperti "harus berupa angka" atau "harus berasal dari daftar ini {...}". Itu tergantung pada seberapa penting konsistensi atribut untuk katalog Anda dan seberapa rumit implementasi yang Anda inginkan. Melihat katalog produk dari beberapa pengecer online, menurut saya, sebagian besar siap untuk menukar kesederhanaan demi konsistensi.

Ya, EAV itu jahat, kecuali jika tidak.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Praktik Terbaik untuk Membuat Indeks di Tabel MySQL Anda – Rolling Index Builds

  2. Kodekan API Pertama Anda Dengan Node.js dan Express:Hubungkan Database

  3. Apakah kueri mysql dinamis dengan sql melarikan diri sama amannya dengan pernyataan yang disiapkan?

  4. Cara Membuat API GraphQL Tanpa Server untuk MySQL, Postgres, dan Aurora

  5. Bagaimana cara membagi string nama di mysql?