Justin Cave ha ragione nel dire che ciò può portare a dati ridondanti, ma ciò dipende davvero da come si progetta il database.
L'approccio di serializzare un intero oggetto in un BLOB non è così scandaloso come la maggior parte delle persone qui pensa che lo sia. In effetti, per alcune applicazioni, questo può essere il miglior design che puoi fare, come ho spiegato qui: /programming//a/12644223/1121352 .
In effetti, la serializzazione di un oggetto comporta almeno due vantaggi:
1- Riduzione della mancata corrispondenza dell'impedenza : alcuni tipi Java non sono disponibili in SQL, in particolare se si utilizzano molte classi e tipi personalizzati, la conversione avanti e indietro da oggetti Java in SQL può essere una seccatura enorme e persino portare ad ambiguità.
2- Maggiore flessibilità nel tuo schema . In effetti, gli schemi relazionali sono davvero ottimi per i dati che condividono la stessa struttura, ma se alcuni dei tuoi oggetti all'interno di una singola classe possono avere proprietà diverse a seconda delle condizioni in fase di esecuzione, gli schemi relazionali possono ostacolare in modo significativo il flusso di lavoro.
Quindi, ci sono sicuramente vantaggi in questo approccio (almeno questi due, ma certamente altri che non ho citato), ma ovviamente l'enorme costo da pagare è che perdi quasi tutti i benefici degli schemi relazionali.
Tuttavia, è possibile ottenere il meglio da entrambi i mondi se si progetta attentamente il database: è comunque possibile impostare uno schema relazionale (ad esempio: colonne chiave univoche) utilizzando gli attributi univoci per ciascun oggetto, quindi archiviare l'oggetto nel BLOB . In questo modo, puoi comunque assicurarti il rapido recupero del tuo oggetto dato un identificatore univoco che è definito dagli attributi del tuo oggetto, riducendo anche la ridondanza, mentre annulli la mancata corrispondenza dell'impedenza e mantieni la piena flessibilità degli oggetti Java.
Come nota a margine , ci sono alcuni tentativi da parte di alcuni produttori di DB di fondere insieme modelli relazionali e di oggetti, come il tipo di dati JSON in PostSQL e PostgreSQL in modo da poter elaborare direttamente JSON come qualsiasi colonna relazionale, e anche SQL3 e OQL (Object Query Language) per aggiungere il supporto (limitato) di oggetti in SQL.
Alla fine, questa è tutta una questione di design e di compromesso tra il modello relazionale e il modello a oggetti.
/ EDIT dopo aver letto i commenti: ovviamente, se i tuoi dati devono essere ricercabili ("interrogabili"), NON devi archiviarli come BLOB. Ma se alcune parti dei tuoi dati non sono pensate per essere ricercabili , ma piuttosto un qualche tipo di metadati, archiviare questa parte di dati come oggetto all'interno di un BLOB può essere una buona soluzione, specialmente se questi metadati hanno una struttura flessibile e può cambiare da oggetto a oggetto.