Item
グループに入れたいインスタンスがありますItemGroup
。ただし、Item
が別のアイテムグループに移動された場合は、説明責任の理由から変更を追跡したいと思います。たとえば、10月Item
に1つ、9月にもう1つあったかどうかを知る必要がありItemGroup
ます。
これをデータベースでどのようにモデル化する必要がありますか?私のクラス、OOPでこれをどのようにモデル化する必要がありますか?私はいくつかの異なる解決策を見ることができますが、それらはすべて何らかの形で複雑であるため、それを実装する方法がわかりません。
3つのテーブルを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
を2つだけItemGroup
にすることですが、両方にタイムスタンプを設定して、いつ変更されるかを知る必要があります。グループが更新された場合、そのグループに属するすべてのアイテムを更新する必要があるため、これも複雑です。
Item
+----+---------+-----+------+----------+-----------+
| id | item_nr | ean | name | group_id | timestamp |
+----+---------+-----+------+----------+-----------+
ItemGroup
+----+------------+-----+-----------+
| id | group_name | vat | timestamp |
+----+------------+-----+-----------+
そして、おそらく他の解決策があります。1つは、古いバージョンを別のテーブルに移動することです。しかし、現在のデータと古いデータの両方を検索する必要があるときにデータを検索するのは複雑です。prev_id
または、古いバージョンにリンクする列を作成することもできます。
同様のデータモデルの経験があり、推奨事項がある人はいますか?この種の問題のベストプラクティスはありますか?