Я хотел бы создать веб-приложение, которое позволит пользователям вести базу данных музыкальных альбомов и предлагать изменения в базе данных.
Мне интересно, как можно представить предлагаемое изменение в строке базы данных.
Итак, у меня может быть схема базы данных:
CREATE TABLE albums (
id PRIMARY SERIAL,
name TEXT,
year INTEGER
);
Включая музыкальную запись:
id: 3
name: Lemonade
year: 2015
и кто-то замечает, что «Лимонад» Бейонсе действительно вышел в 2016 году, поэтому они предложили бы изменить:
изменить год для идентификатора альбома 3 на 2016
Вот несколько реализаций, которые я рассмотрел
Хранение в другой таблице
Я рассмотрел реализацию, в которой есть дополнительная таблица для хранения предлагаемых обновлений:
CREATE TABLE album_suggested_changes (
id PRIMARY SERIAL,
album_id INTEGER REFERENCES(albums),
name TEXT,
year INTEGER
);
Таким образом, ранее предложенное изменение может быть представлено в виде строки в этой таблице:
----------------------
| id | album_id | year |
------------------------
| 1 | 3 | null |
----------------------
null
столбцы в этой таблице могут представлять поля, которые не будут изменены. Это проблемная схема, хотя. Что если вы хотите предложить установить поле на null
? Возможно, здесь можно использовать другое специальное значение для обозначения «не изменять».
Хранение в формате JSON
Возможно, предлагаемое изменение может быть представлено в JSON:
[
{ "field": "year", "value": 2016 }
]
Это дает очень четкое описание того, какие конкретные поля должны измениться.
Хранение необработанных данных в формате JSON мне кажется немного странным, но, возможно, это правильный вариант использования?