Я лично не знаком с Django, но если вы хотите воспользоваться функциональностью JSON в PostgreSQL, я бы, вероятно, использовал столбец первичного ключа отдельно от вашего более произвольного JSON. Что-то вроде:
CREATE TABLE stuff (
id SERIAL NOT NULL PRIMARY KEY,
data JSON NOT NULL
);
Таким образом, вы получаете столбец id
в качестве надежного справочника и можете делать с JSON все, что захотите. Если у вас есть известная / предсказуемая структура JSON, вы можете создать индексы , чтобы повысить производительность при запросе в данных JSON.
Оригинальный ответ:
Мне не ясно, какой продукт базы данных вы собираетесь использовать, но, будучи знакомым с MongoDB, базой данных, ориентированной на документы JSON, я могу рассказать вам, как она там работает. Когда вы вставляете документ, если вы его не предоставите, добавляется поле _id
, которое MongoDB называет ObjectId
. Таким образом, если вы вставите пример JSON, у вас будет что-то вроде:
{
"_id": ObjectId("5d97d46a54198e0797d86457"),
"color": "Blue",
"size": "Large"
}
Если вы хотите обновить только этот документ, вы можете использовать _id
в «предложении where», например:
db.collection.updateOne({
_id: ObjectId("5d97d46a54198e0797d86457")
}, {
$set: {
color: "Red",
size: "Medium"
}
});
Опять же, не зная, какую БД вы используете, это может быть далеко от базы. Если вы имеете дело с JSONB в чем-то вроде PostgreSQL, то вы обычно включаете serial
или аналогичный столбец для поддержания фиксированного первичного хранения, как вы упомянули.