У меня есть таблица для ведения определенных бизнес-транзакций, назовем ее LOANS
. Каждая запись может в любой момент времени иметь одно из нескольких «состояний», например «в состоянии повторной оплаты / открытия», «по умолчанию», «аннулировано» или «оплачено».
Статус записи может измениться только из-за «события» или действия, предпринятого пользователем приложения (некоторые события не вызывают изменения состояния, например, платеж изменяет запись, но не изменяет состояние). Отслеживая текущее состояние, также важно, чтобы мы могли легко отслеживать «событие», которое переводит транзакцию в это состояние.
Я видел другие настройки баз данных, в которых LOANS
содержит столбец состояния, а буква (или даже внешний ключ к таблице возможных состояний) используется для обозначения текущего состояния. Тогда в таблице EVENTS
есть столбец от FK
до LOANS
.
Это решение работает, но я обеспокоен тем, что это допускает возможную потерю целостности данных. Другими словами, ничто не мешает установить статус «по умолчанию» без EVENT
для поддержки изменения. Это было бы предоставлено исключительно приложению, чтобы гарантировать, что этого никогда не произойдет (в этом решении, на мой взгляд, нет ссылочной целостности).
Мое альтернативное решение - очистить столбец состояния в LOANS
и использовать вместо него столбец lastEvent
, который является FK для EVENTS
. Таблица EVENTS
будет поддерживать «тип» события, который, в свою очередь, будет описывать изменение состояния (например, если lastEvent
имел тип «payoff», то, естественно, состояние «оплачивается»).
Мои вопросы:
- Должен ли я вообще беспокоиться о целостности данных (это обычное дело, потому что это нормально)?
- Озвучено ли предложенное мной решение или есть лучшее решение?
- Есть ли какие-либо подводные камни в моем решении, о которых мне следует знать?
Если это имеет значение, я использую MS SQL SERVER 2005.