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

Desain basis data:Opsi EAV?

Meskipun minimalis seperti yang ditunjukkan, tabel atribut Model2 memperkenalkan konsep meta-data ke dalam campuran, dengan semua kebaikan yang berasal darinya. Ada keuntungan lain dari Model2, misalnya peningkatan kinerja terkait dengan ukuran baris yang lebih kecil (dari tabel Nilai), tetapi saya ingin fokus pada konsep meta-data.

Bahkan apa adanya Tabel atribut Model2 merupakan penyimpanan semua atribut yang valid (dengan model1 seseorang perlu menjalankan semacam kueri agregat untuk mendapatkan daftar seperti itu). Juga, dan apa adanya , repositori cukup untuk memperkenalkan batasan kunci asing untuk membantu menjaga integritas kumpulan data (dengan Model 1 seseorang akan memerlukan bentuk validasi eksternal dari nilai yang disimpan dalam kolom atribut.

Dengan beberapa tambahan sederhana, tabel atribut dapat menjadi repositori serbaguna yang dapat digunakan untuk berbagai tujuan. Misalnya tabel mungkin menyertakan beberapa hal berikut

  • info seperti nama yang cocok untuk tampilan setiap atribut
  • beberapa tanda yang menunjukkan jenis bidang (numerik vs. string vs. tanggal dll.), untuk penanganan/pemrosesan yang berbeda
  • tabel Nilai tertentu tempat atribut yang mendasarinya disimpan (Model hanya menampilkan satu tabel tetapi pengoptimalan/penskalaan terkadang meminta pemisahan tabel)
  • fakta bahwa atribut dapat disimpan sebagai kolomnya sendiri di tabel "Nilai" (sekali lagi merupakan bentuk pengoptimalan, pada dasarnya mendapatkan yang terbaik dari kedua dunia:fleksibilitas skema model EAV tetapi kinerja tradisional model relasional untuk atribut yang paling banyak digunakan dan/atau paling umum untuk semua entitas.
  • kemampuan untuk mengganti nama atribut, tanpa mengganggu tabel utama. Perubahan hanya pada tingkat meta-data.
  • berbagai semantik berorientasi aplikasi. Misalnya indikator bahwa atribut tertentu harus ditawarkan sebagai salah satu bidang pencarian dasar vs. lanjutan.

Singkatnya, tabel atribut menjadi sumber daya yang memungkinkan aplikasi benar-benar digerakkan oleh data (atau lebih tepatnya, meta digerakkan oleh data). Memang Anda mungkin juga menyukai tabel entitas yaitu tabel tempat metadata yang berkaitan dengan berbagai jenis entitas dikumpulkan:yang merupakan jenis entitas yang berbeda, atribut mana yang diizinkan untuk jenis entitas mana, dll.

Sekarang... perhatikan komentar dari zerkms , di bawah pertanyaan itu sendiri. Terlepas dari semua manfaatnya, model EAV juga hadir dengan kekurangan dan tantangannya, seperti yang ditunjukkan oleh kompleksitas kueri, dan juga masalah kinerja. Kekhawatiran ini seharusnya tidak mendiskualifikasi, apriori, EAV:ada banyak kasus penggunaan di mana EAV adalah pendekatan yang lebih baik.
Dengan asumsi EAV adalah pilihan daripada Model2, atau bahkan sesuatu yang sedikit lebih canggih secara definitif lebih unggul dari model1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah dalam memasukkan string utf-8 ke dalam database dan kemudian mengeluarkannya ke halaman web

  2. ap_proxy_connect_backend menonaktifkan pekerja untuk (127.0.0.1)

  3. Otomatiskan Penerapan MySQL atau Cluster Postgres Anda Dari Cadangan

  4. PHP:menghitung ulang tahun dari usia

  5. Strategi caching, kapan caching menjadi sia-sia?