0

当店では、データベースを設計するときに、通常、各テーブルの監査属性(LastUpdateUser、LastUpdateDateなど)を含めます。これは一般的な方法ですが、特にエンティティフレームワークなどのツールを使用して、他のテーブルから「継承」するテーブルがある場合、これがますます問題になることに気付きました。

たとえば、テーブルCustomersとEmployeesがあり、それらのテーブルにテーブルPeopleへの外部キーがある場合、継承を確立するときにエンティティ/クラスモデルで、監査フィールドの名前を変更する必要があります。これらは両方に存在するためです。テーブル。おそらく、それらはPersonLastUpdatedUserとPersonLastUpdatedDateになる必要がありますが、Employeesからのものは単にLastUpdatedUserとLastUpdatedDateのままです。

継承用のテーブルを設計するとき、そのような監査フィールドを両方のテーブルに配置しますか、それとも親テーブルにそれらを配置し、子テーブルで属性が変更されるたびに親テーブルを更新しますか?

4

2 に答える 2

1

関連するテーブルを持つ親が単一のエンティティを形成し、エンティティ全体の監査を追跡するため、これらの属性が親テーブルに属するよりも継承を使用する場合。何らかの理由で両方のテーブルにこれらの属性が必要な場合は、これらのテーブルが継承の候補として適切ではないことを最初に警告する必要があります。

于 2012-06-05T17:12:14.450 に答える
0

真の監査が必要な場合は、トリガーによって設定される個別の監査テーブルを作成します(アプリケーションによって作成されることはありません。そうしないと、監査が必要な項目を見逃すことになります)。また、古い値と新しい値の両方、および変更を行った日付とユーザーまたはアプリケーションを表示します。

各テーブルで最後に更新された列が必要で(これは、どのテーブルが最後に変更されるかについて何も教えてくれないので、親にだけ置くよりも良いと思います)、継承を使用したい場合は、作成する必要がありますlastUpdatedにテーブル名を追加することによる一意の名前。したがって、PersonLastUpdatedやOrderLastUpdatedなどです。

または、継承を使用しません。

于 2012-06-05T17:38:15.943 に答える