Я новичок в базе данных, я из мира 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
, тогда янужно будет объединить множество таблиц, чтобы получить окончательный статус.Есть какие-нибудь предложения для этого?
Большое спасибо за чтение и ответы.