sql >> Databáze >  >> RDS >> Sqlserver

Kdy je lepší ukládat příznaky jako bitovou masku, než používat asociativní tabulku?

Skvělá otázka!

Nejprve si udělejme nějaké předpoklady o „lepším“.

Předpokládám, že se moc nestaráte o místo na disku - bitová maska ​​je efektivní z hlediska prostoru, ale nejsem si jistý, že na tom moc záleží, pokud používáte SQL server.

Předpokládám, že vám záleží na rychlosti. Bitová maska ​​může být velmi rychlá při použití výpočtů – ale při dotazování na bitovou masku nebudete moci použít index. Na tom by nemělo tolik záležet, ale pokud chcete vědět, kteří uživatelé mají přístup k vytvoření, váš dotaz by byl něco jako

select * from user where permsission & CREATE = TRUE

(dnes na cestách nemám přístup k serveru SQL). Tento dotaz by nemohl použít index kvůli matematické operaci – takže pokud máte velký počet uživatelů, bylo by to docela bolestivé.

Předpokládám, že vám záleží na udržovatelnosti. Z hlediska udržovatelnosti není bitová maska ​​tak výrazná jako základní problémová doména jako ukládání explicitních oprávnění. Téměř jistě byste museli synchronizovat hodnotu příznaků bitové masky napříč více komponentami – včetně databáze. Ne nemožné, ale bolest v zádech.

Takže pokud neexistuje jiný způsob, jak vyhodnotit "lepší", řekl bych, že trasa bitové masky není tak dobrá jako ukládání oprávnění v normalizované struktuře databáze. Nesouhlasím s tím, že by to bylo „pomalejší, protože se musíte připojit“ – pokud nemáte zcela nefunkční databázi, nebudete to schopni změřit (zatímco dotazování bez výhody aktivního indexu se může znatelně stát pomalejší i s několika tisíci záznamy).



  1. Jak změnit databázi na postgresql pomocí Symfony 2.0?

  2. Použití automatizace k urychlení testů vydání na PostgreSQL

  3. Chyba Oracle instantclient DYLD_LIBRARY_PATH

  4. Nainstalujte MySQL na Mac