2

リレーショナル データベースで人工/代理キーを使用している人をよく見かけます。考えてみると、これは結合クエリを単純化する一方で、新しいタプルの挿入を複雑にしているように思えます。次の例を見てください。

R1(a, b, c) R2(c, d, e) c は、R1(c) によって参照される、R2 の代理主キーです。R1 と R2 にデータを挿入する場合、最初に、挿入する R2 タプルが R2 に既に存在するかどうかを確認する必要があります。存在する場合は、対応する人工キーを取得して、タプルで参照できるようにする必要があります。 R1用。

自然キーの使用: R1(a,b,d,e) R2(d,e) 属性 d および e は、R1(d,e) によって参照される R2 の自然主キー セットです。R1 と R2 に新しいタプルを挿入したい場合は、単純に挿入できます。これは、R1 タプルの場合、参照する外部キー (つまり、R2 プライマリ キー セットの値) がわかっているためです。

私の仮定は正しいですか、それとも何か不足していますか?

4

1 に答える 1

2

通常、代理キーを処理するには追加の作業が必要であることは間違いありません。一部のライブラリ コードまたはフレームワークを利用して代理キー処理を支援できる場合もありますが、複雑さと処理時間の点で常にコストがかかります。同様の考慮事項がクエリと挿入に適用されます。サロゲート キーを多用すると、常にクエリが平均してより多くの結合を実行することになります。

代理キーが必要だと考えるたびに、潜在的な利益に対してこれらのコストを評価する必要があります。サロゲートを使いすぎないでください。多くの場合、おそらくほとんどの場合、データベース テーブルで代理キーを使用する正当な理由はありません。

于 2015-05-24T12:16:47.973 に答える