Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Najlepszy sposób przechowywania ustawień użytkownika w MySQL?

Za wszystko, co zawsze ustawiony na co użytkownik powinien zachować to w Users tabela, zgodnie ze zwykłą normalizacją. Jeśli chodzi o opcjonalną konfigurację, podoba mi się następująca struktura tabeli:

TABLE Users:
  id INT AI
  name VARCHAR
  ...

TABLE User_Settings
  user_id INT PK,FK
  name VARCHAR PK
  type BOOL
  value_int INT NULL
  value_str VARCHAR NULL

Gdzie User_Settings.type określa, czy należy odwoływać się do pola liczby całkowitej czy ciągu znaków.

tj.:

INSERT INTO Users (id, name) VALUES (1, 'Sammitch');
INSERT INTO User_Settings (user_id, name, type, value_int) VALUES (1, 'level', 1, 75);
INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'en');

A w przypadku wydania WSTAW/AKTUALIZUJ:

INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'fr')
  ON DUPLICATE KEY UPDATE value_str='fr';

Ponadto, jak mówi większość innych osób, serializowanie i przechowywanie preferencji nie jest szczególnie dobrym pomysłem, ponieważ:

  1. Nie możesz pobrać pojedynczej wartości za pomocą zapytania, musisz pobrać cały serializowany ciąg, odserializować go i odrzucić niepotrzebne dane.
  2. Łatwo ulega uszkodzeniu i trudno go odzyskać.
  3. Bardzo trudno jest napisać surowe zapytanie, np. globalnie naprawić pewne ustawienie.
  4. Przechowujesz zasadniczo dane tabelaryczne w jednym polu tabeli.

Edycja retrospektywna z września 2016 r.:

W międzyczasie miałem kilka kłótni z ludźmi o to, jak najlepiej przechowywać opcjonalne ustawienia, a także o ogólną strukturę tabeli zdefiniowaną powyżej.

Chociaż ta struktura tabeli nie jest całkowicie zła , to nie jest dokładnie dobre zarówno. Próbuje jak najlepiej wykorzystać złą sytuację. Serializacja opcjonalnych ustawień może działać, o ile możesz dostosować się do tych ustawień:

  1. Wszystko jest ładowane na raz, bez wybierania ani wybierania.
  2. Nie można indeksować, przeszukiwać ani łatwo modyfikować masowo .

Następnie możesz rozważyć dodanie pola, takiego jak optional_settings w Users tabela zawierająca zserializowaną postać [np.:JSON] ustawień. Omijasz powyższe, ale jest to prostsze podejście i możesz przechowywać bardziej złożone ustawienia.

Ponadto, jeśli używasz typu LOB, takiego jak TEXT do przechowywania dane niekoniecznie są przechowywane "w rzędzie", przynajmniej w MySQL.

W każdym razie to zależy od Ty aby określić wymagania i ograniczenia aplikacji i dokonać najlepszego wyboru na podstawie tych informacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przywracanie bazy danych MySQL z fizycznych plików

  2. Połączenie z Db umiera po>4<24 w hibernacji wiosennego rozruchu jpa

  3. Jak zaimportować do MySQL ogromny plik CSV z 200,00 wierszami (asynchronicznie i szybko)?

  4. Jak mogę dołączyć ciąg do istniejącego pola w MySQL?

  5. Czy dynamiczne zapytania mysql z kodem ucieczki sql są tak samo bezpieczne, jak przygotowane instrukcje?