Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kapan lebih baik menyimpan flag sebagai bitmask daripada menggunakan tabel asosiatif?

Pertanyaan yang bagus!

Pertama, mari kita membuat beberapa asumsi tentang "lebih baik".

Saya berasumsi Anda tidak terlalu peduli dengan ruang disk - bitmask efisien dari sudut pandang ruang, tetapi saya tidak yakin itu penting jika Anda menggunakan server SQL.

Saya berasumsi Anda peduli dengan kecepatan. Bitmask bisa sangat cepat saat menggunakan perhitungan - tetapi Anda tidak akan dapat menggunakan indeks saat menanyakan bitmask. Ini seharusnya tidak terlalu menjadi masalah, tetapi jika Anda ingin tahu pengguna mana yang memiliki akses membuat, kueri Anda akan menjadi seperti

select * from user where permsission & CREATE = TRUE

(belum mendapat akses ke SQL Server hari ini, di jalan). Kueri tersebut tidak akan dapat menggunakan indeks karena operasi matematika - jadi jika Anda memiliki banyak pengguna, ini akan sangat menyakitkan.

Saya berasumsi Anda peduli tentang rawatan. Dari sudut pandang pemeliharaan, bitmask tidak seekspresif domain masalah yang mendasarinya seperti menyimpan izin eksplisit. Anda hampir pasti harus menyinkronkan nilai flag bitmask di beberapa komponen - termasuk database. Bukan tidak mungkin, tapi rasa sakit di bagian belakang.

Jadi, kecuali ada cara lain untuk menilai "lebih baik", saya akan mengatakan rute bitmask tidak sebaik menyimpan izin dalam struktur database yang dinormalisasi. Saya tidak setuju bahwa itu akan menjadi "lebih lambat karena Anda harus bergabung" - kecuali Anda memiliki basis data yang benar-benar tidak berfungsi, Anda tidak akan dapat mengukur ini (sedangkan kueri tanpa manfaat dari indeks aktif dapat menjadi terasa lebih lambat bahkan dengan beberapa ribu catatan).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara terbaik untuk melakukan logika pernyataan kasus bersarang di SQL Server

  2. Urutan Bersyarat T-SQL Oleh

  3. Apakah Integrasi SQL Server CLR mendukung file konfigurasi?

  4. Prioritas Tipe Data di SQL Server

  5. Kode kerangka kerja entitas lambat saat menggunakan Include() berkali-kali