3

私が目にする多くのテーブル デザインには、主キーとして id 列があります。たとえば、Logging テーブルの log_id、イベント テーブルの event_id などです。この列は、他のテーブルの他の列に依存せず、レコードを一意に識別します。ルックアップの観点から見ると、情報のルックアップに使用される列は、テーブル内の他の列でもあり、インデックスを作成することもできます (status/event_type/etc など)。では、テーブル内のレコードを表すような id 列を持つ必要があるのは何でしょうか? そのような id 列をログ テーブルから削除し、代わりに複合キーを使用する場合、どのような犯罪を犯していますか? アプリケーションでその列が使用されていない場合に、テーブルにそのような一意の id 列を持つことが一般的に行われているのはなぜですか? 専門家の意見を聞くことを望んでいます。:o

更新: 迅速な返信ありがとうございます。主に、監査テーブルなどのテーブルで複合キーの代わりに代理キーを使用することが非常に一般的である理由を理解したいと思います (他の例もありますが、会話に焦点を合わせようとしています)。このようなテーブルでは、イベント、ユーザー ID、およびタイムスタンプの組み合わせによって一意のレコードを簡単に識別できました。私がオンラインで調査した設計のほとんどは、event_id などのキーを利用しています。本当の理由がある場合、その理由を理解しようとしていますか? 実際、それは db の不要なストレージを消費することを意味するのではないでしょうか?

4

4 に答える 4

0

他の回答に加えて、留意すべきもう 1 つの質問は、どのような独自性を考慮する必要があるかということです。複合キーを一意のままにする必要がある場合は、次の 2 つの選択肢があります。1) PK として複合キーを作成するか、2) 代理キー (システム生成番号) を使用して別の制約、代替キーを複合キー (自然キー) に追加します。それは私が時々使用するドライブです。ダイアン

于 2013-05-22T21:32:27.163 に答える
0

複合キーは、ID と同じ目的を果たします。それがあなたのニーズを満たしているなら、あなたは犯罪を犯していません。

ただし、選択した複合キーが衝突を引き起こすことがわかった場合 (1 つまたはまったく期待していなかったときに複数のレコードを返している)、複合キーを再評価する必要があります。

一意であり、再利用されないことが保証されている ID を使用すると、この問題を回避できます (テーブルに余分なフィールドが必要になります)。

于 2013-05-22T20:40:18.640 に答える