Как представить предлагаемое изменение строки базы данных? - PullRequest
0 голосов
/ 10 января 2019

Я хотел бы создать веб-приложение, которое позволит пользователям вести базу данных музыкальных альбомов и предлагать изменения в базе данных.

Мне интересно, как можно представить предлагаемое изменение в строке базы данных.

Итак, у меня может быть схема базы данных:

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 мне кажется немного странным, но, возможно, это правильный вариант использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...