Justin Cave ma rację, że może to prowadzić do nadmiarowych danych, ale tak naprawdę zależy to od sposobu zaprojektowania bazy danych.
Podejście do serializowania całego obiektu w kroplę nie jest tak oburzające, jak większość ludzi tutaj uważa. W rzeczywistości w przypadku niektórych aplikacji może to być najlepszy projekt, jaki możesz zrobić, jak wyjaśniłem tutaj: /programming//a/12644223/1121352 .
Rzeczywiście, serializacja obiektu prowadzi do co najmniej dwóch korzyści:
1- Ograniczanie niedopasowania impedancji : niektóre typy Java są po prostu niedostępne w SQL, szczególnie jeśli używasz wielu klas i typów niestandardowych, dlatego konwersja obiektów Java na SQL może być ogromnym problemem, a nawet prowadzić do niejasności.
2- Większa elastyczność schematu . Rzeczywiście, schematy relacyjne są naprawdę świetne dla danych o tej samej strukturze, ale jeśli niektóre obiekty w obrębie jednej klasy mogą mieć różne właściwości w zależności od warunków w czasie wykonywania, schematy relacyjne mogą znacznie utrudnić przepływ pracy.
Tak więc z pewnością są zalety tego podejścia (przynajmniej tych dwóch, ale na pewno innych, których nie cytowałem), ale oczywiście ogromny koszt do zapłacenia polega na tym, że tracisz prawie wszystkie korzyści ze schematów relacyjnych.
Można jednak uzyskać to, co najlepsze z obu światów, jeśli dokładnie projektuje się bazę danych: nadal można ustawić schemat relacyjny (tj. Unikalne kolumny kluczy), używając atrybutów unikalnych dla każdego obiektu, a następnie przechowywać obiekt w obiekcie blob . W ten sposób nadal możesz zapewnić szybkie pobieranie obiektu, korzystając z unikalnego identyfikatora zdefiniowanego przez atrybuty obiektu, zmniejszając również nadmiarowość, jednocześnie eliminując niedopasowanie impedancji i zachowując pełną elastyczność obiektów Java.
Na marginesie, niektórzy twórcy DB podejmują kilka prób łączenia modeli relacyjnych i obiektowych, takich jak typ danych JSON w PostSQL i PostgreSQL, aby można było bezpośrednio przetwarzać JSON jak dowolną kolumnę relacyjną, a także SQL3 i OQL (Object Query Language), aby dodać (ograniczoną) obsługę obiektów do SQL.
Ostatecznie wszystko to jest kwestią projektu i kompromisu między modelem relacyjnym a modelem obiektowym.
/ EDYCJA po przeczytaniu komentarzy: oczywiście, jeśli dane muszą być możliwe do przeszukiwania („zapytania”), NIE należy przechowywać danych jako obiektu blob. Ale jeśli niektóre części danych nie mają być przeszukiwalne , ale raczej pewnego rodzaju metadane, wówczas przechowywanie tej części danych jako obiektu wewnątrz obiektu blob może być dobrym rozwiązaniem, szczególnie jeśli te metadane mają elastyczną strukturę i może zmieniać się z obiektu na obiekt.