sql >> Database teknologi >  >> RDS >> Mysql

Hvordan gemmer man flere værdier i en enkelt kolonne, hvor der bruges mindre hukommelse?

Hvis en bruger kan have flere roller, er det sandsynligvis bedre at have en user_role tabel, der gemmer disse oplysninger. Det er normaliseret og vil være meget nemmere at forespørge på.

En tabel som:

user_id | role
--------+-----------------
      1 | Admin
      2 | User
      2 | Admin
      3 | User
      3 | Author

Giver dig mulighed for at forespørge efter alle brugere med en bestemt rolle, såsom SELECT user_id, user.name FROM user_role JOIN user WHERE role='Admin' i stedet for at skulle bruge strengparsing for at få detaljer ud af en kolonne.

Dette vil blandt andet være hurtigere, da du kan indeksere kolonnerne korrekt og vil tage marginalt mere plads end nogen løsning, der sætter flere værdier i en enkelt kolonne - hvilket er modsat det relationelle databaser er designet til.

Grunden til at dette ikke skal gemmes er, at det er ineffektivt, af den grund DCoder angiver i kommentaren til dette svar . For at kontrollere, om en bruger har en rolle, skal hver række i brugertabellen scannes, og derefter skal kolonnen "roller" scannes ved hjælp af strengmatching - uanset hvordan denne handling er eksponeret, skal RMDBS'en udføre strengoperationer for at parse indholdet. Det er meget dyre operationer og slet ikke godt databasedesign.

Hvis du bruger for at have en enkelt kolonne, vil jeg kraftigt foreslå, at du ikke længere har et teknisk problem, men et personalestyringsproblem . Tilføjelse af yderligere tabeller til en eksisterende database, der er under udvikling, burde ikke være svært. Hvis dette ikke er noget, du er autoriseret til at gøre, så forklar hvorfor det ekstra bord er nødvendigt til den rigtige person - fordi munging flere værdier i en enkelt kolonne er en dårlig, dårlig idé .



  1. Pearsons korrelationskoefficientformel i SQL

  2. Sådan håndteres fejl i SQL Server-indlejrede transaktioner

  3. Hvordan fungerer det at hente data fra SQL Server til SqlDataReader?

  4. Hvordan laver jeg en masseindsættelse i mySQL ved hjælp af node.js