私は 2 つのテーブルを持っています。それらFoo
を と と呼びます。1 対多Bar
の関係で、Foo
は の親ですBar
。Foo の主キーは、シーケンスで自動的に生成される整数です。
次の制約が与えられた場合、主キーをどのように設定するかによってBar
完全に異なります。Foo
Bar
- Bar のレコードはプログラムによって生成されるため、ユーザー入力を識別子として信頼することはできません。
- 複数のプロセスが Bar レコードを生成しているため、
Select Max()
を生成するために を含むものはすべてID
競合状態を示します。
私は満足していない2つの可能な解決策を思いつきました:
- テーブルを、それらのレコードを一緒にマップする 3 番目のテーブルとの多対多の関係であるかのように扱い、レコード間のマッピングが正しく作成されるように、アプリケーション コードでレコードの挿入を処理します。データベースの設計が誤解を招き、アプリケーション コードのエラーによって無効なデータが発生する可能性があるため、これは好ましくありません。
- Bar に 2 つの列:
FooID
and を指定し、 for someを選択しFooBarID
て値を生成します が、前述のように、競合状態が発生します。FooBarID
max(FooBarID)+1
FooID
別のテーブル レイアウトのアイデアをいただければ幸いです。