2011-06-29 14 views
6

Piszę aplikację, która komunikuje się z webowym interfejsem API, który odpowiada za pomocą JSON. Obecnie tłumaczę obiekty JSON na obiekty Java za pomocą gson (co jest niesamowite, przy okazji).Przechowuj JSON w polu sqlite?

Teraz chcę przechowywać niektóre z tych obiektów w bazie danych SQLite. Jednak mają one wiele właściwości, które nigdy nie byłyby używane w zapytaniach (tzn. Nie będę z tymi właściwościami oznaczać, że nie będę ich używać), więc uważam, że nie jest konieczne tworzenie kolumn dla wszystkich z nich. Co mam na myśli to robi:

  • mieć tylko kolumny dla podstawowych danych, które będą używane podczas zapytań do bazy danych
  • Mają jedną TEXT lub BLOB kolumnę (który z nich polecacie?), Który przechowuje rzeczywisty JSON, więc mogę odtworzyć obiekt Java z niego i uzyskać dostęp do wszystkich danych.

To zarówno uczynić moje życie łatwiejsze i usprawnić mojego kodu (nie będę musiał napisać bardzo inny kod gdy mamy do czynienia z danymi z API w porównaniu z danymi z bazy danych).

Jednak, chociaż nie widzę wad, to wydaje się nieco podejrzany.

Jakie problemy napotkasz, jeśli użyję tej techniki?

+3

Technicznie byłoby to naruszeniem zasad normalizacji - pól, których wartości zależą od innych dziedzin, ale zasady normalizacji to sugestie, a nie zasady rzeźbione w kamieniu - MUSISZ robić to w ten sposób. –

+0

W mojej aplikacji przechowuję dane JSON w polu "TEKST", ale to dane, które nie zasługują na swoją własną tabelę. – javisrk

+0

@Marc Podoba mi się, jak tłumaczyłeś "podejrzany" w "naruszeniu zasad normalizacji" :) (tak, wiem, czym one są) – Felix

Odpowiedz

3

Najważniejsze, co mi się nie podoba, to polegać na strukturze zapisanego/wyszukanego JSON-a, ponieważ jest całkowicie poza zasięgiem bazy danych. Nie chodzi o to, że nie można podjąć środków ostrożności przeciwko możliwym problemom, ale jeśli JSON jest w jakiś sposób skrócony lub w inny sposób naruszony w sposób, który wywołuje parser, wówczas brakuje całego obiektu, a nie tylko jednej niepoprawnej lub skróconej właściwości. Jeśli to akceptowalne ryzyko, to prawdopodobnie rozsądna technika.

+0

W jakich okolicznościach wartość zostanie obcięta? Jeśli to nie jest w bazie danych, to czy mówisz o awarii sprzętu? Jeśli tak, to sądzę, że mogę podjąć to ryzyko (prawdopodobnie gorsze rzeczy mogłyby się zdarzyć w przypadku awarii sprzętu). – Felix

+0

Mam na myśli z powodu ludzkiego błędu, a nie awarii sprzętu - jeśli nieprawidłowy JSON w jakiś sposób trafi do bazy danych, dzieje się to po cichu. Pomiędzy twoją biblioteką JSON a domyślnym zachowaniem SQLite, to * nie powinno * zachodzić, ale jeśli tak, konsekwencje są większe niż gdybyś pozwolił bazy danych zarządzać strukturą danych. –