Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JSON][MySQL] Przechowywanie danych
Forum PHP.pl > Forum > Bazy danych
Tomplus
Witam,

Mam szybkie pytanie, acz odpowiedzi mogą być dłuższe.

W pracy, ale nie tylko w pracy bo także w projektach OpenSource spotykam się z rozwiązaniami gdzie w kolumnach tabel baz SQL przechowywane są dane jako string JSON. Przykładem takiego projektu jest Wordpress. Który właśnie tak przechowuje tak dane, bardzo dużo danych. U mnie jako obiekt JSON przechowuje się dane klienta [adres, telefon, imię, nazwisko], czy parametry zamówienia.

Pytanie czy jest to racjonalne podejście i efektywne z punktu widzenia programowania?

Z jednej strony trudniej się przeszukuje takie dane, bo nie można wykonać zapytania który odwołuje się do obiektu bądź tablicy i trzeba tworzyć własne metody wyszukiwania treści, z drugiej strony, tabele MySQL są bardziej przejrzyste, bo nie rozciągają się na kilkanaście kolumn, często mających puste wartości.

Jakie są wasze zdania na takie łączenie SQL i JSON?
Pyton_000
Mam nadzieję że usatysfakcjonuje Cię taka odpowiedź: https://dev.mysql.com/doc/refman/5.7/en/json.html
Tomplus
Ja operacje JSON SQL znam, co nie znaczy że wszędzie można stosować. Jest jeszcze wiele baz danych np. MySQL które nie mają tej obsługi. Tutaj dopiero od wersji 5.7.8.

Ja zadałem pytanie nie o manual czy konkretną pomoc, a bardziej własną opinię użytkowników. Także twoją Pyton_000.
mmmmmmm
Jak chcesz sbie trzymać dane w JSONie, to trzymaj je w pliku tekstowym. Bazy służą do czegoś zupełnie innego...
Pyton_000
Jeśli nie masz obsługi natywnej JSON to trzymanie takich struktur jest bez sensu z pkt widzenia MYSQL (Tutaj albo PgSQL albo NonSQL wchodzi).

Samo trzymanie JSON nie jest złe, ale zależy do czego. Ja np. trzymam jako JSON opcje konfiguracji czegoś tam gdzie i tak musiałbym pobrać z BD wszystkie opcje na raz. Tutaj mam 1 wiersz.
Z przykład który Ty pokazałeś trzymanie JSON nie ma najmniejszego sensu. Nie ma tu co biadolić że tabelki brzydko wyglądają jak są puste czy coś. Nie ogląda się ich wink.gif

Jeśli z jakiegoś powodu boli cię szerokość tabel bo jest dużo pól a wiele z nich jest pusta w każdym rekordzie (w różnych rekordach mogą to być różne pola) to warto się zastanowić czy nie zmienić struktury na ilość. Czyli tworzysz tabelkę: id, type, type_id, name, value
Wtedy np. masz:
id, product, 1, price, 12
id, product, 1, color, red
id, product, 2, color, green
id, product, 3, price, 2000

Do takiej struktury dobrze jest mieć obiekt z mapowaniem i dostępnymi wszystkimi polami aby pobrane wiersze z BD od razu zmapować na pola klasy. Wygodniej bo nie musisz ręcznie potem sprawdzać czy Product hasColor = red.


Reasumując. JSON można pchać o ile jak sam zauważyłeś nie będziesz w nim szukał, a dane które są tam zawarte są w 90% przypadkach muszą być pobrane wszystkie. Jeśli na dodatek masz obsługę natwyną przez BD to ten minus znika generalnie.


@mmmmmmm ot żeś wymyślił.
mmmmmmm
@Pyton_000
Wymyśliłem to samo co ty, tylko napisałem to dużo prościej i dosadniej.

@Pyton_000
Wymyśliłem to samo co ty, tylko napisałem to dużo prościej i dosadniej.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.