Pokud může mít uživatel více rolí, je pravděpodobně lepší mít user_role
tabulka, ve které jsou tyto informace uloženy. Je normalizován a dotazování bude mnohem jednodušší.
Tabulka jako:
user_id | role
--------+-----------------
1 | Admin
2 | User
2 | Admin
3 | User
3 | Author
Umožní vám dotazovat se na všechny uživatele s konkrétní rolí, jako je SELECT user_id, user.name FROM user_role JOIN user WHERE role='Admin'
místo toho, abyste museli používat analýzu řetězců k získání podrobností ze sloupce.
Mimo jiné to bude rychlejší, protože můžete správně indexovat sloupce a zabere to o něco více místa než jakékoli řešení, které vkládá více hodnot do jednoho sloupce – což je v rozporu s tím, pro co jsou relační databáze navrženy.
Důvod, proč by se to nemělo ukládat, je, že je to neefektivní, z důvodu, který DCoder uvádí v komentáři k tato odpověď . Chcete-li zkontrolovat, zda má uživatel nějakou roli, bude muset být prohledán každý řádek uživatelské tabulky a poté bude muset být prohledán sloupec „role“ pomocí porovnávání řetězců – bez ohledu na to, jak je tato akce vystavena, bude muset RMDBS provádět operace s řetězci pro analýzu obsahu. Jedná se o velmi nákladné operace a vůbec ne dobrý návrh databáze.
Pokud potřebujete Chcete-li mít jeden sloupec, důrazně bych navrhoval, že už nemáte technický problém, ale problém s vedením lidí . Přidání dalších tabulek do existující databáze, která je ve vývoji, by nemělo být obtížné. Pokud k tomu nemáte oprávnění, vysvětlete, proč je potřeba další tabulka správné osobě – protože mungování více hodnot do jednoho sloupce je špatné, špatné nápad .