質問

小規模なSQL Server '08データベースの実装において、判断を下そうとしています。

フラットファイルデータベースの出力テキストファイルを古いCOBOLシステムから前述のSQL Serverデータベースに変換しています。これは車両および不動産ローンのデータベースであり、Lender ID(7桁の数字)、銀行口座番号(15桁)、および「account suffix」の組み合わせによって一意に識別できます。 (2桁)。

データベース管理に関して言えば、私はかなり素朴であると告白します(正直なところ、私は現在の位置まで実際にそれをやったことがありません)。他のいくつかのテーブルにインデックスを付けるキーを実装するため:

1)上記の値の3列のキーを使用して各ローンを識別する、または
2)「キー」を実装してデータを非正規化します。 3つの値を組み合わせた24文字の文字列である列。

非正規化はく、認められていますが、ローンが銀行間でやり取りしたり、ローンの接尾辞を変更したりできないため、更新の異常が発生することは予想できません。これらの値の変更は、異なるアカウントであることが保証されています。

複合キーはよりエレガントですが、私はそれが悪いことであることを示唆するいくつかの論文を読みました。

では、どのオプションがより良い選択である可能性が高く、より重要なのはなぜですか?

役に立ちましたか?

解決

自動生成された代理キーを使用し、自然キーに一意のインデックスを配置します。このように、自然キーが変更された場合(また、銀行が別の銀行に買収された場合など)、1つの場所で変更するだけで済みます。代理キーを使用する際の最も重要なことは、1つのexiustsと一意のインデックスがそれを行う場合、自然キーの一意性を確保することです。

他のヒント

これが頻繁に更新されない参照データである場合、マルチパートキーの使用は問題ありません。

これが高トラフィックのトランザクションデータである場合は、代理キー(int identity、クラスター化された主キー)を追加し、3つの部分からなるキーを代替キーにします。

オプション2を実装することはまったくお勧めしません。

自動インクリメントの数値代理キーを使用することをお勧めします。他の3つの「キー」をマッシュアップする必要があるのはなぜですか。列?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top