Джастін Кейв вірно вважає, що це може призвести до надмірних даних, але це дійсно залежить від того, як ви проектуєте свою базу даних.
Підхід серіалізації цілого об'єкта до краплі не такий кричущий, як вважає він. Насправді для деяких застосувань це може бути найкращий дизайн, який ви можете зробити, як я пояснив тут: /programming//a/12644223/1121352 .
Дійсно, серіалізація об'єкта призводить до щонайменше двох переваг:
1- Зменшення невідповідності імпедансу : деякі типи Java просто недоступні в SQL, особливо якщо ви використовуєте безліч класів і користувацьких типів, таким чином перетворення назад і назад з об’єктів Java в SQL може бути величезним клопотом і навіть призводити до неоднозначностей.
2- Більше гнучкість у вашій схемі . Дійсно, реляційні схеми дійсно чудові для даних, що мають однакову структуру, але якщо деякі ваші об'єкти в межах одного класу можуть мати різні властивості залежно від умов під час виконання, реляційні схеми можуть значно перешкоджати вашому робочому процесу.
Таким чином, у цього підходу безумовно є переваги (принаймні, ці два, але, безумовно, інші я не цитував), але, звичайно, величезна вартість, яку потрібно заплатити, полягає в тому, що ви втрачаєте майже всі переваги реляційних схем.
Однак ви можете отримати найкраще з обох світів, якщо ретельно розробити базу даних: ви все одно можете встановити реляційну схему (тобто: унікальні стовпці ключів), використовуючи атрибути, унікальні для кожного об'єкта, а потім зберігати об’єкт у краплі . Таким чином, ви все ще можете забезпечити швидкий пошук вашого об'єкта, надаючи унікальний ідентифікатор, який визначається атрибутами вашого об'єкта, а також зменшуючи надмірність, при цьому ви знищуєте невідповідність імпедансу та зберігаєте повну гнучкість об’єктів Java.
Як бічна примітка, є кілька спроб деяких виробників БД поєднати реляційні та об'єктні моделі разом, як тип даних JSON в PostSQL та PostgreSQL, так що ви можете безпосередньо обробляти JSON так само, як і будь-який реляційний стовпець, а також SQL3 та OQL (Object Мова запитів) для додавання (обмеженої) підтримки об'єктів у SQL.
Зрештою, це все питання дизайну та компромісу між реляційною моделлю та об'єктною моделлю.
/ Редагуйте після прочитання коментарів: звичайно, якщо ваші дані повинні бути доступними для пошуку ("підлягають запиту"), НЕ слід зберігати свої дані як крапку. Але якщо деякі частини ваших даних призначені не для пошуку , а для мета-даних, то зберігання цієї частини даних як об'єкта всередині блоку може бути хорошим рішенням, особливо якщо ці метадані мають гнучку структуру і може змінюватися від об'єкта до об'єкта.