これは少し宗教的な議論です。私の個人的な好みは、自然の主キーではなく、合成主キーを持つことですが、両側に良い議論があります。現実的には、一貫性と妥当性がある限り、いずれのアプローチもうまくいく可能性があります。
自然キーを使用する場合、主に2つの主な欠点は、複合キーと変更された主キー値の存在です。コンポジットの主キーがある場合は、明らかに各子テーブルに複数の列を設定する必要があります。エンティティ間に多くの関係がある場合、データモデルの観点からは扱いにくいことがあります。しかし、クエリを開発する人々にも悲しみを引き起こす可能性があります.N結合条件のN-1を使用するクエリを作成して、ほぼ正しい結果を得ることは非常に簡単です。ナチュラルキーがあれば、必然的にナチュラルキーの値が変化し、その変化を多くの異なるエンティティに波及させる必要があります。これはテーブルのユニークな値を変更するよりもはるかに複雑です。
一方、合成キーを使用すると、追加の列を追加して追加のオーバーヘッドを追加してスペースを無駄にし、機能的に重複した結果を得るリスクが高まります。ビジネスキーに固有の制約を作成すること、またはその組み合わせに一意でないインデックスが存在することを忘れて、それが一意のインデックスであると仮定するのは非常に簡単です。私は実際には数日前にこの特定の失敗によって噛まれました。ユニークな制約を作成するのではなく、合成された自然キーを索引付けしました。ダムの間違いですが、それは比較的簡単です。
クエリの作成と命名規則の観点からは、Aの主キーがA_IDになり、Bの主キーが次のようになっているテーブルを結合していることを知ってうれしいので、合成キーを使用する傾向があります。 B_IDになります。これは、Aの主キーがA_NAMEとA_REVISION_NUMBERの組み合わせであり、Bの主キーがB_CODEであることを覚えようとするよりもはるかに自己記述的です。
回答を特定するのが非常に難しい場合もあります。それらはすべてとても良いです。 –
はい、そうです。 =)そしてSOの仕組みは、投票と受け入れられた答えによるものです。良い裁判官になり、より完全なものを選んでください。初心者の座席を持って読んで、あなたが学んだ答えや最も学んだ答えから何かを見つけようとします。誰もあなたに怒っていることはありません! ;-)さらに、評判を増やすチャンスが増えたとき(あなただけの価値がある場合)、質問に答えることで、人々はあなたのお手伝いをしようと努力しています。気をつけて、良い昼/夜を! =) –