Wdrażam następujący model do przechowywania danych związanych z użytkownikiem w mojej tabeli - mam 2 kolumny - uid
(klucz podstawowy) i meta
kolumnę, która przechowuje inne dane o użytkowniku w formacie JSON.
uid | meta
--------------------------------------------------
1 | {name:['foo'],
| emailid:['foo@bar.com','bar@foo.com']}
--------------------------------------------------
2 | {name:['sann'],
| emailid:['sann@bar.com','sann@foo.com']}
--------------------------------------------------
Jest to lepszy sposób (wydajność mądry, design-wise) niż model jedna kolumna-per-mienia, gdzie tabela ma wiele kolumn, takich jak uid
, name
, emailid
.
W pierwszym modelu podoba mi się to, że możesz dodać tyle pól, ile to możliwe, nie ma ograniczeń.
Zastanawiałem się też, kiedy wdrożyłem pierwszy model. Jak wykonać na nim zapytanie, na przykład chcę pobrać wszystkich użytkowników o nazwach takich jak „foo”?
Pytanie - Jaki jest lepszy sposób przechowywania danych związanych z użytkownikiem (pamiętając, że liczba pól nie jest ustalona) w bazie danych przy użyciu JSON lub kolumna na pole? Ponadto, jeśli wdrożony jest pierwszy model, jak wykonać zapytanie do bazy danych, jak opisano powyżej? Czy powinienem używać obu modeli, przechowując wszystkie dane, które mogą być wyszukiwane przez zapytanie w oddzielnym wierszu, a inne dane w JSON (to inny wiersz)?
Aktualizacja
Ponieważ nie będzie zbyt wielu kolumn, w których muszę przeprowadzić wyszukiwanie, czy mądrze jest używać obu modeli? Klucz po kolumnie dla danych, które muszę wyszukać, i JSON dla innych (w tej samej bazie danych MySQL)?