sql >> Databáze >  >> RDS >> Mysql

Jak uložit více hodnot do jednoho sloupce, kde spotřebuje méně paměti?

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 .



  1. Jak funguje SESSION_CONTEXT() na serveru SQL Server

  2. Přehled nového DBaaS od MariaDB - SkySQL

  3. aktualizační tabulku mysql ajax podle třídy

  4. Rychlý start migrace databáze pomocí Talend