Хранить отношения модели в момент времени - PullRequest
0 голосов
/ 14 марта 2011

Я разрабатываю приложение, которое позволяет людям запрашивать гарантию на конкретную работу. Они предоставляют информацию, например, какой продукт использовался и т. Д. (Некоторые из их вариантов приведены в списке элементов, уже находящихся в системе. Затем мы формируем для них гарантию на основе этих вариантов.

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

Самый простой способ, который я могу придумать, это не хранить отношения с исходными таблицами (например, product_id), а скорее записать продукт в виде строки. Это кажется немного грязным. Другой способ - не допускать удаление / изменение продукта из таблицы продуктов, если к нему не приложены никакие гарантии. Возможно, реализуете столбец replace_with, который указывает на отредактированную версию того же продукта? Я делал это раньше в корзине, и это работало довольно хорошо. У меня просто много отношений, и мне интересно, есть ли способ, о котором я не думал?

1 Ответ

0 голосов
/ 14 марта 2011

А как же:

  1. Добавление в таблицу «продукт снят с производства» 1: 0 с гарантией. Только столбцы имеют идентификатор гарантии.
  2. Добавление в "историческую таблицу продуктов", которая имеет:

    Те же столбцы, что и в таблице товаров

    Дополнительное поле метки времени для даты / времени, когда оно было заполнено.

    Первичный ключ идентификатора продукта / метки времени

    Индекс по идентификатору продукта

  3. триггер / процедура удаления / модификации, которые:

    Выбор всех гарантий на изделие.

    Если есть какие-либо гарантии, скопируйте сведения о продукте в «историческую таблицу продуктов», добавив вторую часть первичного ключа.

    Для каждой найденной гарантии вставьте запись в таблицу «продукт снят с производства».

Это сделано исходя из того, что вы, вероятно, захотите иметь дело с гарантиями на снятые с производства товары, отличными от гарантий на активные товары.

...