То, что вы хотите, это способность отслеживать изменения в вашей организации от первоначального создания до конечного состояния. Вам также нужно «оглянуться», чтобы увидеть объект, как он существовал в любое конкретное время в прошлом.
Легко. Хотя и не совсем просто. Вам нужна версия для ваших данных. Я упомянул о версировании в нескольких ответах, поэтому вместо того, чтобы повторить довольно длинный ответ, позвольте мне просто направить вас к паре.
https://dba.stackexchange.com/questions/114580/best-way-to-design-a-database-and-table-to-keep-records-of-changes/114738#114738
Which option would be better for historical information of a table?
К сожалению из-за отсутствия деталей здесь, но ваш вопрос был очень общий характер.
Update: Там нет ничего в оценки, которые изменяются с течением времени (хотя я не понимаю, почему он нуждается в информации об адресе), поэтому он должен быть estimate_details вы хотите сохранили в течение долгого времени. Но я не могу сказать, есть ли несколько подробностей для оценки. На диаграмме показано соотношение 1: n, поэтому я пойду с этим.
Лучше всего было бы поместить другой объект, скажем, торги между оценки и estimate_details:
create table bids(
estimate_id int not null,
eff_date date not null default current_date(),
...,
constraint PK_Bids primary key(estimate_id, eff_date),
constraint FK_Bids_Estimate foreign key(estimate_id)
references estimates(ID)
);
create table estimate_details(
bid_id int not null,
eff_date date not null,
product_id int not null,
quantity float,
constraint PK_Estimate_Details primary key(bid_id, eff_date, product_id),
constraint FK_EstimateDetail_Bid foreign key(bid_id, eff_date)
references bids(estimate_id, eff_date)
);
Я предполагаю, что здесь, что никакие две детали не будут касаться того же продукта. Другие ставки данные могут включать дату, когда она была отправлена клиенту, общая стоимость, дата ответа клиента и принята ли ставка.
При создании оценки первая ставка также создается с тем же идентификатором, что и оценка и дата вступления в силу, что может быть началом работы с датой, указанной в сметной или другой значащей дате. Подробная ссылка на заявку с использованием идентификатора сметы и даты ставки. Затем ставка заканчивается и представляется клиенту. Клиент отклоняет так, что создается новая ставка - тот же идентификатор, другая дата. Новая ссылка на эту заявку.
Может быть любое количество ставок каждый с любым количеством деталей.Вы можете запросить любую оценку в любое время, просто получив заявку на дату, на которую вы хотели посмотреть, и получить информацию, связанную с этой ставкой.
Я также предполагаю, что каждая новая заявка начинается с чистого листа - что никакие данные не переносятся, чтобы применить неизмененные к новой ставке. Если это неверно, если вы хотите повторно использовать некоторые детали из ставки для участия в торгах, то небольшое изменение может устранить необходимость дублирования этих деталей между ставками.
Есть ли у вас какие-либо схемы? Если это так, было бы неплохо, если бы вы могли это показать. Кроме того, почему вы думаете, что ваш дизайн плох? Выполняли ли вы какие-либо измерения? –
Также зависит от того, что существенно отличается между циклом заказа оценки - задания - изменения. Вы могли бы структурировать его как одну таблицу, а запись оценки будет скопирована с новым «type_id», чтобы стать заданием. Но дает ли вам достаточный аудиторский след? –