T_FATHER
私は 2 つのテーブルを持っています。それらを と と呼びましょうT_CHILD
。各父親は次のように複数の子を持つことができます。
T_FATHER
--------------------------
ID - BIGINT, from Generator
T_CHILD
-------------------------------
ID - BIGINT, from Generator
FATHER_ID - BIGINT, Foreign Key
ここで、テーブルにカウンターを追加しT_CHILD
ます。これは、1 から始まり、新しい子供ごとに 1 を追加しますが、グローバルではなく、父親ごとに、次のようになります。
ID | FATHER_ID | COUNTER |
--------------------------
1 | 1 | 1 |
--------------------------
2 | 1 | 2 |
--------------------------
3 | 2 | 1 |
--------------------------
私の最初の考えは、指定された父親に存在する子供の数をカウントし、カウンターに1を追加するbefore-insert-triggerを作成することでした。これは、同じカウンターで終了する 2 つの挿入が同時に行われない限り、正常に機能するはずです。これが実際には起こらない可能性は高いですが、後悔するよりは救ってください。
発電機を使用できるかどうかはわかりませんが、父親ごとに発電機が必要になるため、そうは思いません。
私の現在のアプローチは、前述のトリガーを使用し、FATHER_ID
+COUNTER
に一意のインデックスを追加して、同時挿入の 1 つだけが通過するようにすることです。クライアント側で例外を処理する必要があります (そして、失敗した挿入を再試行します)。
これを Firebird で直接処理するより良い方法はありますか?
PS: 2 つのテーブルのいずれも削除されないため、これは問題ではありません。