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

Czy jest jakaś zaleta/wada przechowywania wartości pola jako tablicy JSON zamiast tworzenia nowej tabeli i obstawiania relacji jeden-do-wielu?

Z mojego doświadczenia zależy to w dużej mierze od przechowywanych danych. Oba sposoby mają zalety i wady. Jeśli jest to MMORPG następnie powiedz, że masz komputer który ma pasek. A BG może umieścić mikstury w tym pasie, aby mieć szybki dostęp podczas bitwy. Dlatego chcemy zapisać identyfikatory mikstur, które są przechowywane na pasku postaci.

Najczęstszym żądaniem byłoby „zdobądź wszystkie mikstury, które ma postać X”. A w obu przypadkach działałoby to dość szybko.

Korzyści z przechowywania tych identyfikatorów mikstur w osobnej tabeli:

  • Możesz wyszukać konkretny identyfikator mikstury i jest to bardzo szybkie. Przykład w grze:administratorzy usunęli niektóre mikstury z gry i dlatego musisz zaktualizować pasy wszystkich osób
  • Możesz uzyskać fajne statystyki. Przykład w grze:poszukaj najczęściej używanej mikstury wśród wszystkich graczy
  • Baza danych zachowa integralność danych. Przykład w grze:nigdy nie spotkasz sytuacji, w której użyłeś mikstury, a gra wyświetli komunikat „Ups, mikstura o takim identyfikatorze nie istnieje”
  • To dobre dla spójności. Przykład w grze:wziąłeś miksturę z paska i włożyłeś ją do plecaka. Gra może to zaimplementować, wywołując transakcję za pomocą dwóch prostych, wyraźnych instrukcji SQL.
  • Możesz wykonać JOIN. Przykład w grze:musimy uzyskać listę mikstur w pasie wraz z ich nazwami, wagami i obrazkami, które są przechowywane w osobnej tabeli.
  • Możesz zaktualizować pojedynczy element bez konieczności aktualizowania całego pasa. Przykład wymuszony w grze:masz w pasie milion mikstur i wypiłeś jeden.

Korzyści z przechowywania jako json:

  • Jeśli jest to gra przeglądarkowa, która używa javascript po stronie klienta, otrzymujesz obiekt json Belt z jednym prostym żądaniem, zamiast wykonywać zapytanie Select, a następnie konwertować na json
  • O wiele łatwiej jest zachować kolejność elementów, ponieważ tablice json są już uporządkowane. Przy podejściu tabelowym potrzebna byłaby dodatkowa kolumna o nazwie „zamówienie” i aktualizowanie jej za każdym razem oraz sprawdzanie, czy dwa elementy nie mają tej samej kolejności itp.
  • Możesz dokonać kilku zmian w Pasie po stronie klienta, a następnie kliknąć „Zastosuj” — boom, za pomocą jednego zapytania możesz zaktualizować cały pas. Podczas gdy przy podejściu tabelowym potrzebujesz do tego co najmniej dwóch zapytań (DELETE + INSERT)
  • poza tym popularne DBMS mają wtyczki które obsługują funkcje json w bazie danych

Konkluzja:to nie są główne zalety, a nie krytyczne problemy. Wszystkie są rozwiązywalne i przy odpowiednim zaprojektowaniu aplikacji obydwa rozwiązania będą działać poprawnie. Zanim zdecydujesz, jak przechowywać dane, zadaj sobie pytanie, jakie są najczęstsze przypadki użycia tych danych, a następnie wybierz rozwiązanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_fetch_array() oczekuje, że parametr 1 będzie problemem z zasobami

  2. SQL — pobierz wynik tylko z bieżącego roku

  3. Sfinks i czy miałeś na myśli...? sugestie pomysł. Czy to zadziała?

  4. Procedury składowane MySQL, Pandy i Użyj multi=True podczas wykonywania wielu instrukcji

  5. Wybieranie losowych wierszy w MySQL