У меня есть экземпляры Item
, которые я хотел бы иметь в группах ItemGroup
. Но если Item
перенесен в другую группу элементов, я хотел бы отслеживать изменение причин подотчетности. Например. Мне нужно знать, был ли Item
в одном ItemGroup
в октябре, а другой в сентябре.Как моделировать групповое отношение в базе данных и в ООП?
Как это можно сделать в базе данных? Как я должен моделировать это в своих классах, ООП? Я вижу несколько разных решений, но они все сложны, поэтому я не знаю, как его реализовать.
Либо я мог бы пойти с тремя столами, Item
ItemGroup
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
, который ссылается на старую версию.
Есть ли у кого-нибудь, кто имеет опыт аналогичных данных и имеет рекомендации? Есть ли какие-либо рекомендации для такого рода проблем?
Я не следую некоторой логике. Зачем вам нужно создавать новый элемент/группу, когда обновляется какая-либо информация? –
@Joe: По причинам подотчетности. Старая версия должна быть сохранена. – Jonas