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

Bagaimana cara menyimpan 60 Boolean dalam Database MySQL?

Kolom terpisah per nilai lebih fleksibel dalam hal pencarian.

Tabel kunci/nilai yang terpisah lebih fleksibel jika baris yang berbeda memiliki kumpulan nilai Boolean yang berbeda.

Dan, jika

  1. daftar nilai Boolean Anda kurang lebih statis
  2. semua baris Anda memiliki semua nilai Boolean tersebut
  3. pencarian kinerja penting Anda adalah untuk menemukan baris yang salah satu nilainya salah

kemudian menggunakan string teks seperti '1001010010' dll adalah cara yang baik untuk menyimpannya. Anda dapat mencari seperti ini

 WHERE flags <> '11111111'

untuk menemukan baris yang Anda butuhkan.

Anda bisa menggunakan kolom BINARY dengan satu bit per flag. Tapi meja Anda akan lebih mudah digunakan untuk pertanyaan biasa dan pemeriksaan bola mata jika Anda menggunakan teks. Penghematan ruang dari penggunaan BINARY alih-alih CHAR tidak akan signifikan sampai Anda mulai menyimpan jutaan baris.

edit Harus dikatakan:setiap kali saya membangun sesuatu seperti ini dengan array atribut Boolean, saya kemudian kecewa karena ternyata tidak fleksibel. Misalnya, anggaplah itu adalah katalog bola lampu. Pada pergantian milenium, bendera Boolean mungkin seperti

screw base
halogen
mercury vapor
low voltage

Kemudian, segalanya berubah dan saya membutuhkan lebih banyak flag Boolean, seperti,

LED
CFL 
dimmable
Energy Star

dll. Tiba-tiba tipe data saya tidak cukup besar untuk menampung apa yang saya perlukan. Ketika saya menulis "daftar nilai Boolean Anda kurang lebih statis" yang saya maksudkan adalah Anda tidak mengharapkan sesuatu seperti karakteristik bola lampu berubah selama masa pakai aplikasi Anda.

Jadi, tabel atribut terpisah mungkin menjadi solusi yang lebih baik. Itu akan memiliki kolom berikut:

   item_id           fk to item table         -- pk
   attribute_id      attribute identifier     -- pk
   attribute_value   

Ini pada akhirnya fleksibel. Anda bisa menambahkan bendera baru. Anda dapat menambahkannya ke item yang ada, atau ke item baru, kapan saja selama masa pakai aplikasi Anda. Dan, setiap item tidak memerlukan koleksi flag yang sama. Anda dapat menulis "barang apa yang memiliki atribut palsu?" pertanyaan seperti ini:

 SELECT DISTINCT item_id FROM attribute_table WHERE attribute_value = 0

Namun, Anda harus berhati-hati karena kueri "item apa yang memiliki atribut yang hilang" jauh lebih sulit untuk ditulis.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih item dari berbagai sumber, dan pesan berdasarkan tanggal

  2. Bagaimana cara mengambil hasil dari baris MySQL dengan beberapa kolom dengan nama yang sama dengan PHP?

  3. Koneksi jarak jauh MySQL gagal dengan metode otentikasi yang tidak diketahui

  4. Mendapatkan perbedaan waktu antara dua kali di PHP

  5. mysql:Apa sintaks yang tepat untuk NOT LIKE?