Из того, что вы описали, это звучит как работа для jsonb.Предполагая, что name
является уникальным в определенной таблице, я могу представить что-то вроде этого:
create table test (
tableId integer,
name text,
data jsonb,
constraint pk primary key(tableId, name)
);
insert into test values (1, 'movie1', '{"rating": 10, "name": "test"}');
insert into test values (1, 'movie2', '{"rating": 9, "name": "test2"}');
insert into test values (2, 'book1', '{"rank": 100, "name": "test", "price": 10}');
insert into test values (2, 'book2', '{"rank": 10, "name": "test", "price": 12}');
По сути, идея состоит в том, чтобы использовать tableId для идентификации каждой вложенной таблицы и сохранения строк подтаблиц в этой одной БДТаблица.
Это открывает некоторые возможности:
- создать отдельную таблицу для хранения метаданных о каждой вложенной таблице.Например, схема вложенных таблиц может храниться здесь для проверки уровня приложения.
- частичный индекс для больших / горячих вложенных таблиц:
create index test_1_movie_name on test ((data->>'name')) where tableid = 1