【发布时间】:2010-10-04 19:12:46
【问题描述】:
我有 Item 的实例,我希望将它们分组到 ItemGroup 组中。但是如果Item 被移动到另一个项目组,出于责任原因,我想跟踪更改。例如。我需要知道 Item 在 10 月和 9 月是否在一个 ItemGroup 中。
我应该如何在数据库中对此进行建模?我应该如何在我的课程中对此进行建模,OOP?我可以看到一些不同的解决方案,但它们在某些方面都很复杂,所以我不知道如何实现它。
我可以选择三个表,ItemItemGroupGroupRelation,并在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 更新了,我必须更新属于该组的所有 Item,所以这也很复杂。
Item
+----+---------+-----+------+----------+-----------+
| id | item_nr | ean | name | group_id | timestamp |
+----+---------+-----+------+----------+-----------+
ItemGroup
+----+------------+-----+-----------+
| id | group_name | vat | timestamp |
+----+------------+-----+-----------+
可能还有其他解决方案,一种可能是将旧版本移到另一张桌子上。但是,当同时查找当前数据和旧数据时,搜索数据是否复杂。或者我可以有一个列prev_id 链接到旧版本。
有没有人有类似数据模型的经验并有任何建议?有没有针对此类问题的最佳实践?
【问题讨论】:
-
我没有遵循你的一些逻辑。为什么在更新某些信息时必须创建新项目/组?
-
@Joe:出于责任原因。旧版本必须保存。
标签: oop database-design data-modeling erp