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.