Рассмотрим шаблон Мартина Фаулера Сериализация LOB :
CREATE TABLE Documents (
documentid SERIAL PRIMARY KEY,
-- fixed relational attributes ...
document TEXT -- contains XML, YAML, whatever
);
Вы можете поместить любые полуструктурированные данные с динамическими атрибутами в столбец document
. Вы просто не можете легко использовать предикаты SQL для поиска или сортировки по полям в этом BLOB-объекте. Но в любом случае вы не могли этого сделать - атрибуты переменных являются нереляционными понятиями, и поддерживать их в SQL независимо от того, что именно, неудобно.
Вы можете использовать гибридный подход, сохраняя некоторые фиксированные атрибуты в обычных столбцах и все переменные атрибуты в BLOB-объектах.
Это указывает на то, почему существуют документно-ориентированные базы данных. Они предназначены для решения проблемы, которую реляционная парадигма решила не поддерживать. Но документно-ориентированные базы данных не делают некоторые интересные вещи, которые делают реляционные базы данных, такие как ссылочная целостность и даже согласованность типов данных.