我有Item
的實例,我希望在組ItemGroup
。但是,如果Item
被移到另一個項目組,我想跟蹤問責原因的更改。例如。我需要知道Item
是在10月份的一個ItemGroup
中,還是在9月份。我應該如何建模數據庫和OOP中的組關係?
我該如何在數據庫中建模?我應該如何在我的課程OOP中對此進行建模?我可以看到幾種不同的解決方案,但它們都以某種方式複雜化,所以我不知道如何實現它。
要麼我可以與三個表,Item
ItemGroup
GroupRelation
並保留在GroupRelation
時間戳。如果項目信息更新,我需要創建一個新項目和一個新的GroupRelation。如果項目更改組,我必須創建一個新的GroupRelation。如果集團信息發生變化,我必須創建一個新的Group和一個新的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
。
有沒有人有類似數據模型的經驗,並有任何建議?有這種問題的最佳做法嗎?
我不遵循你的一些邏輯。爲什麼當更新其中的某些信息時,您需要創建新的項目/組? – 2010-10-04 19:22:00
@Joe:出於問責原因。舊版本必須保存。 – Jonas 2010-10-04 19:25:08