Rumah >pangkalan data >tutorial mysql >Bagaimanakah Kami Boleh Merekabentuk Pangkalan Data EAV untuk Pengurusan Data Sejarah yang Cekap dengan Pembezaan Atribut?
Pangkalan data Entity-Attribute-Value (EAV) telah dikritik kerana hadnya, terutamanya reka bentuk dan cabaran pelaporan yang tidak cekap. Dengan mengasingkan atribut entiti berdasarkan jenis, kelemahan ini boleh diatasi sambil mengekalkan kelebihan data sejarah penjejakan EAV.
Skema yang dicadangkan memperkenalkan jadual atribut induk yang mengkategorikan atribut setiap jenis entiti. Ini membenarkan pemprosesan pelbagai jenis atribut, termasuk pilihan, integer, tarikh, rentetan, teks dan perpuluhan.
<code>entity_type { id, type, // 例如,“博客”、“用户”、“产品”等 created_at } entity { id, entity_type_id, created_at } attr { id, entity_id, type, name, created_at } option { id, attr_id, entity_id, multiple, // 允许多个值? name, created_at } attr_option { id, attr_id, entity_id, option_id, option, created_at } attr_int { attr_id, entity_id, int, created_at } attr_relation { attr_id, entity_id, entity_fk_id, created_at } attr_datetime { attr_id, entity_id, datetime, created_at } attr_string { attr_id, entity_id, var_char, created_at } attr_text { attr_id, entity_id, text, created_at } attr_decimal { attr_id, entity_id, decimal, created_at }</code>
Dapatkan semula jenis entiti:
<code> SELECT * FROM entity_type et LEFT JOIN entity e ON e.entity_type_id = et.id WHERE e.id = ?</code>
Dapatkan atribut entiti:
<code> SELECT * FROM attr WHERE entity_id = ?</code>
Dapatkan nilai atribut:
<code> SELECT * FROM attr_option, attr_int, attr_relation, attr_text, ... WHERE entity_id = ?</code>
Cari perhubungan antara entiti:
<code> SELECT * FROM entity AS e LEFT JOIN attr_relation AS ar ON ar.entity_id = e.id WHERE ar.entity_id = 34 AND e.entity_type = 2;</code>
Walaupun peningkatan ke atas keupayaan reka bentuk EAV tradisional, masih terdapat beberapa isu yang berpotensi untuk dipertimbangkan:
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Merekabentuk Pangkalan Data EAV untuk Pengurusan Data Sejarah yang Cekap dengan Pembezaan Atribut?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!