私の仕事(プログラミングスキルの一部を活用する非プログラミングの仕事)では、外部委託されたカスタムメイドのプログラムのSQLデータベースからレポートを生成するように依頼されました。
テーブルを見ると、それらの多くにPKとして割り当てられた複数のフィールドがあることがわかりますが、それはなぜですか?シリアルの数値IDに比べて、どのような利点がありますか?
私の仕事(プログラミングスキルの一部を活用する非プログラミングの仕事)では、外部委託されたカスタムメイドのプログラムのSQLデータベースからレポートを生成するように依頼されました。
テーブルを見ると、それらの多くにPKとして割り当てられた複数のフィールドがあることがわかりますが、それはなぜですか?シリアルの数値IDに比べて、どのような利点がありますか?
データの整合性。キーとは、重複データがデータベースに入るのを防ぐ一意性の制約を意味します。キーは、データベース内のファクトが、それらが記述することになっている実際のオブジェクトまたは概念で適切に識別できるようにするのに役立ちます。実際には、すべてが単一の列の単一の属性によって識別できる、または識別されるべきではありません。
注:複数の属性を持つキーは、複数のキーではありません。それはまだ1つのキー(複合キーと呼ばれます)です。
これは複合キーと呼ばれます。order_no
がテーブル内の主キーでOrder
あり、テーブル内に各注文アイテムに割り当てられた注文内の一意のシーケンス番号がある場合Order_Item
、つまり、すべての注文にシーケンス番号1で始まるアイテムがある場合、Order_Itemの主キーはになりますorder_no, item_sequence_no
。
これを次のように生成された主キーと比較してOrder_Item
ください:あなたはまだに一意のインデックスが必要ですorder_no, item_sequence_no
。クエリについて考えると、複合キーに依存していることがわかるかもしれません。
ビジネス依存キーとシステム生成キーは、技術的にはそれぞれドメインキーとサロゲートキーとして知られています。c2wikiにはそれに関する良い議論があります。
テーブル内の複数の値が、代理の自動生成された主キーではなく、自然な主キーを形成する場合があります。
これの利点のいくつかは、これらの複数の値がレコードを一意に識別する場合、PKが一意性を強制し、MS SQL Serverでは、デフォルトでPKがテーブルのクラスター化されたインデックスになることです。
これは、PKとして使用されるテーブルと列によって異なります。
質問が多対多の関連付けで使用される結合テーブルである場合、外部キー列からの複合主キーを使用でき(それらの組み合わせは結合テーブルで一意になるため)、追加の合成主キーは使用されません。必要です。
他の例は自然キーで、既存の列値の組み合わせを使用して、テーブル内の行を一意に参照できます(たとえば、人の名前と名前)。そのような候補の自然キーのほとんどは目的のプロパティを持っていないため、あまり使用されていません(つまり、一意ではないか、不変ではありません)。