4 つのテーブル (A、B、C、D) があり、A は B および C との 1 対多の関係の親です。C と D は、テーブル D との 1 対多の関係の親です。概念的には、これらの主キーはテーブルは次のようになります。
- A: 援助
- B: Aid、bnum (A への外部キー付き)
- C: Aid、cnum (A への外部キー付き)
- D: Aid、bnum、cnum (B および C への外部キー付き)
「num」列は、各レコードではなく、関係の各親 ID に基づいて自動インクリメントされます。以前のアプリケーションでこのアプローチを使用しましたが、B レコードと C レコードの作成は、'select max()' クエリを介して新しい 'num' 値を生成する順次プロセスによって行われたため、問題ではありませんでした。私はこのアプローチに本当に満足したことはありませんでしたが、仕事はやり遂げました。
私が現在取り組んでいる特定のケースでは、テーブル A と B のレコードはユーザーによって入力されるため、ID の自動生成は問題になりません。テーブル C と D の場合、これらのテーブルのレコードは複数の同時バッチ プロセスによって生成されているため、それらの識別子を何らかの方法で生成する必要があります。私がリストした前の方法は、競合状態に対しては機能しません。
これは Oracle データベース用であるため、自動インクリメント列ではなくシーケンスを使用することに注意してください。
上記の制約がある場合、A、B、C、および D を表すテーブルをどのように設計すれば、エンティティ間の関係が適切に適用され、アプリケーション コードで識別子を生成する必要がなくなりますか?