Можно ли задать внешний ключ в JSON-поле PostgreSQL?
Можно ли привязать ключи к JSON-полю к другим таблицам?
Пример: поле data вида {"parameter1": value1, "parameter2": value2}. При этом, если есть значение parameter1, то оно должно быть привязано к определённой таблице, и соответственно значение не может быть «абы какое», а подвязано именно к другой таблице.
Делается ли такое вообще в JSON-полях на уровне ядра СУБД, без написания вручную кода проверок в обход базы данных?
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
Насколько мне известно, таких возможностей нет. И вообще это нарушение правил нормализации данных. Как вариант, можно добавить генерируемую колонку и сделать её внешним ключом:
CREATE TABLE t1 (
id INTEGER PRIMARY KEY
)
;
CREATE TABLE t2 (
id INTEGER PRIMARY KEY
, v JSONB NOT NULL
, t1_id INTEGER REFERENCES t1(id)
GENERATED ALWAYS AS (CAST(v->'id' AS INTEGER)) STORED
)
;