Я проектирую базу данных, в которой нужно хранить время транзакции и действительное время, и я пытаюсь решить, как эффективно хранить данные и следует ли полностью нормализовать время атрибутов. Например, у меня есть таблица Client, которая имеет следующие атрибуты: ID, имя, ClientType (например, корпорация), RelationshipType (например, клиент, проспект), RelationshipStatus (например, активный, неактивный, закрытый). ClientType, RelationshipType и RelationshipStatus являются изменяющимися во времени полями. Производительность является проблемой, так как эта информация будет ссылаться на большие наборы данных из устаревших систем. В то же время структура базы данных должна легко обслуживаться и изменяться.
Я планирую разделить контрольный журнал и историю за определенный период времени на отдельные таблицы, но я борюсь с тем, как лучше всего это сделать.
У меня есть несколько идей:
1) Три таблицы: Client, ClientHist и ClientAudit. Клиент будет содержать текущее состояние. ClientHist будет содержать любые ранее действительные состояния, а ClientAudit будет использоваться для целей аудита. Для удобства обсуждения давайте забудем о ClientAudit и предположим, что пользователь никогда не допустит ошибку при вводе данных. Делая это таким образом, у меня есть два способа обновить данные. Во-первых, я всегда мог потребовать от пользователя указать дату вступления в силу и сохранить запись в ClientHist, что приведет к записи записи в ClientHist при каждом изменении поля. В качестве альтернативы я мог бы потребовать, чтобы пользователь предоставлял дату вступления в силу только при изменении одного из изменяющихся во времени атрибутов (то есть ClientType, RelationshipType, RelationshipStatus). Это приведет к записи записи в ClientHist только при изменении изменяющегося во времени атрибута.
2) Я мог бы разделить изменяющиеся во времени атрибуты на одну или несколько таблиц. Если я пойду этим путем, я должен поместить все три в одну таблицу или создать две таблицы (одну для RelationshipType и RelationshipStatus и одну для ClientType). Создание нескольких таблиц для изменяющихся во времени атрибутов значительно увеличивает сложность проектирования базы данных. С каждой таблицей также будут связаны таблицы аудита.
Есть мысли?