У меня есть экземпляры Item
, которые я хотел бы иметь в группах ItemGroup
.Но если Item
перемещен в другую группу товаров, я бы хотел отслеживать изменения по причинам подотчетности.Например, мне нужно знать, был ли Item
в одном ItemGroup
в октябре, а другой в сентябре.
Как мне смоделировать это в базе данных?Как мне смоделировать это в моих классах, ООП?Я вижу несколько разных решений, но все они сложны в некотором роде, поэтому я не знаю, как это реализовать.
Либо я мог бы пойти с тремя таблицами, Item
ItemGroup
GroupRelation
и держите отметку времени на GroupRelation
.Если информация об элементе обновляется, мне нужно создать новый элемент и новое GroupRelation.Если Элемент меняет группу, мне нужно создать новое GroupRelation.И если информация о Группе изменяется, я должен создать новую Группу и новое GroupRelation.Это сложно, так как я должен создать несколько новых объектов при изменении.
Item
+----+---------+-----+------+
| id | item_nr | ean | name |
+----+---------+-----+------+
ItemGroup
+----+------------+-----+
| id | group_name | vat |
+----+------------+-----+
GroupRelation
+----+---------+----------+-----------+
| id | item_id | group_id | timestamp |
+----+---------+----------+-----------+
Альтернативное решение может состоять в том, чтобы иметь только два класса Item
и ItemGroup
, но тогда мне нужно иметь временную метку в обоихиз них, так что я знаю, когда они меняются.Если группа обновляется, мне нужно обновить все элементы, принадлежащие этой группе, так что это также сложно.
Item
+----+---------+-----+------+----------+-----------+
| id | item_nr | ean | name | group_id | timestamp |
+----+---------+-----+------+----------+-----------+
ItemGroup
+----+------------+-----+-----------+
| id | group_name | vat | timestamp |
+----+------------+-----+-----------+
И, возможно, есть другие решения, возможно, стоит переместить старые версии в другую таблицу.Но тогда сложно искать данные, когда нужно искать как текущие, так и старые данные.Или у меня может быть столбец prev_id
, который ссылается на старую версию.
Есть ли кто-нибудь, кто имеет опыт подобных моделей данных и имеет какие-либо рекомендации?Есть ли лучшие практики для такого рода проблем?