Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Кога е по-добре да съхранявате флагове като битмаска, вместо да използвате асоциативна таблица?

Страхотен въпрос!

Първо, нека направим някои предположения за "по-добро".

Предполагам, че не ви пука особено за дисковото пространство – битмаската е ефективна от гледна точка на пространството, но не съм сигурен, че това има голямо значение, ако използвате SQL сървър.

Предполагам, че ти пука за скоростта. Една битова маска може да бъде много бърза при използване на изчисления - но няма да можете да използвате индекс, когато отправяте заявка към битовата маска. Това не би трябвало да има толкова голямо значение, но ако искате да знаете кои потребители имат създаване на достъп, вашата заявка ще бъде нещо като

select * from user where permsission & CREATE = TRUE

(нямате достъп до SQL Server днес, на път). Тази заявка няма да може да използва индекс поради математическата операция - така че ако имате огромен брой потребители, това би било доста болезнено.

Предполагам, че ви е грижа за поддръжката. От гледна точка на поддръжка, битмаската не е толкова изразителна, колкото основния проблемен домейн, колкото съхраняването на изрични разрешения. Почти сигурно ще трябва да синхронизирате стойността на флаговете на bitmask между множество компоненти - включително базата данни. Не невъзможно, но болка в гърба.

Така че, освен ако няма друг начин за оценка на "по-добро", бих казал, че маршрутът на битовата маска не е толкова добър, колкото съхраняването на разрешенията в нормализирана структура на базата данни. Не съм съгласен, че би било „по-бавно, защото трябва да направите присъединяване“ – освен ако нямате напълно нефункционална база данни, няма да можете да измерите това (докато заявките без ползата от активен индекс може да стане забележимо по-бавно дори с няколко хиляди записа).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Премахнете SCHEMABINDING от дефинирана от потребителя функция в SQL Server

  2. SQL Server 2016

  3. Как да инсталирате SQL Server на M1 Mac (ARM64)

  4. SQL Server 2016:Подобрения на групата за наличност

  5. Намаляване на разходите за лицензиране на SQL Server