我有一些Item
我想分组的实例ItemGroup
。但是如果一个Item
被移动到另一个项目组,出于责任原因,我想跟踪更改。例如,我需要知道一个Item
是否ItemGroup
在 10 月和另一个在 9 月。
我应该如何在数据库中对此建模?我应该如何在我的课程中对此进行建模,OOP?我可以看到一些不同的解决方案,但它们在某种程度上都很复杂,所以我不知道如何实现它。
我可以选择三张桌子,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
但是我需要在这两个类中都有一个时间戳,以便我知道它们何时更改。如果 Group 被更新,我必须更新属于该组的所有 Items,所以这也很复杂。
Item
+----+---------+-----+------+----------+-----------+
| id | item_nr | ean | name | group_id | timestamp |
+----+---------+-----+------+----------+-----------+
ItemGroup
+----+------------+-----+-----------+
| id | group_name | vat | timestamp |
+----+------------+-----+-----------+
并且可能还有其他解决方案,一个可能是将旧版本移动到另一个表。但是,当同时查找当前数据和旧数据时,搜索数据是否复杂。或者我可以有一个prev_id
链接到旧版本的列。
有没有人有类似数据模型的经验并有任何建议?这类问题有什么最佳实践吗?