Как правильно поддерживать SSOT (Единый источник правды) в базе данных? - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в базе данных, я из мира Front End, и в этом я действительно ценю SSOT.В конце концов, я не хочу видеть странные вещи, происходящие в пользовательском интерфейсе, поскольку это может повлиять на поведение пользователя.

Теперь, когда я проектирую свой собственный бэкэнд с использованием postgres, у меня действительно возникают трудности с определением того, какподойти к SSOT.

Допустим, у меня есть 5 таблиц.user, order, order_status, payment и payment_cancellation.

Отношение:

  • user - order: 1-n
  • order - order_status: 1-н
  • order - payment: 1-н
  • payment - payment_cancellation: 1-1

order_status имеет status столбец, который является ENUM('UNPAID', 'PAID', 'CANCELLED').

Первый вопрос : не является ли таблица order_status полностью избыточной?Поскольку я могу вывести столбец order_status.status полностью из того, имеет ли таблица order какое-либо отношение к payment или нет, верно?Рассмотрим следующий сценарий:

  • UNPAID = заказ без оплаты
  • PAID = заказ с любыми платежами
  • CANCELLED = заказ слюбые платежи, последний платеж которых имеет payment_cancellation

Второй вопрос: Разве я не сломал бы SSOT , имея таблицу order_status?Поскольку, если я неправильно обрабатываю какое-либо изменение отношения, данные все равно не будут действительными?

Третий вопрос: НО, если у меня нет таблицы order_status, тогда янужно будет объединить множество таблиц, чтобы получить окончательный статус.Есть какие-нибудь предложения для этого?

Большое спасибо за чтение и ответы.

1 Ответ

0 голосов
/ 12 декабря 2018

Во-первых, подумайте над именами вещей.Значения UNPAID, PAID и CANCELED, похоже, имеют дело с разными вещами.Например, одно дело отменить заказ.Совершенно другое дело отменить платеж.Подумайте о том, что вам нужно знать о статусе: счета, заказы, платежи, счета и т. Д.

Во-вторых, в мире баз данных мы не говорим о единственном источникеправда столько же, сколько мы говорим о нормализации.Я вижу, что озабоченность SSOT и DRY (не повторяйся) ведет программистов приложений по ужасно плохим путям.

Наконец, вам, вероятно, не нужна таблица order_status.(Но это зависит от приложения.) Сама нормализация не означает, что вам нужно объединить множество таблиц для получения окончательного статуса.Но использование суррогатных идентификационных номеров в каждой таблице позволяет.

...