主キーの特別な点は何ですか?
スキーマ内のテーブルの目的は何ですか? テーブルのキーの目的は何ですか? 主キーの特別な点は何ですか? 主キーに関する議論は、主キーがテーブルの一部であり、そのテーブルがスキーマの一部であるという点を見逃しているようです。テーブルとテーブルの関係に最適なものは、使用されるキーを駆動する必要があります。
テーブル (およびテーブルの関係) には、記録したい情報に関する事実が含まれています。これらの事実は、自己完結型で、意味があり、理解しやすく、矛盾のないものでなければなりません。設計の観点から、スキーマに追加またはスキーマから削除された他のテーブルは、問題のテーブルに影響を与えるべきではありません。情報自体にのみ関連するデータを保存する目的がなければなりません。テーブルに何が格納されているかを理解するために、科学研究プロジェクトを実施する必要はありません。同じ目的で保存されるファクトは、複数回保存されるべきではありません。キーは、記録される情報の全体または一部であり、一意であり、プライマリ キーは、テーブルへのプライマリ アクセス ポイントとなる特別に指定されたキーです (つまり、挿入だけでなく、データの一貫性と使用のために選択する必要があります)。パフォーマンス)。
- ASIDE: 残念なことに、ほとんどのデータベースがアプリケーション プログラマー (私もそうです) によって設計および開発されることの副作用は、アプリケーションまたはアプリケーション フレームワークに最適なものがテーブルのプライマリ キーの選択を左右することが多いことです。これにより、整数キーと GUID キー (これらはアプリケーション フレームワークで簡単に使用できるため) とモノリシック テーブル設計 (メモリ内のデータを表すために必要なアプリケーション フレームワーク オブジェクトの数が減るため) につながります。これらのアプリケーション主導のデータベース設計の決定は、大規模に使用すると、重大なデータの一貫性の問題につながります。このように設計されたアプリケーション フレームワークは、自然にテーブル アット タイムの設計につながります。「部分レコード」はテーブルに作成され、データは時間をかけて入力されます。アプリケーションが適切に機能しない場合、マルチテーブルの相互作用が回避されるか、使用するとデータの一貫性が失われます。これらの設計は、意味のない (または理解しにくい) データ、複数のテーブルにまたがるデータ (現在のテーブルを理解するには他のテーブルを調べる必要があります)、および重複データにつながります。
主キーは必要なだけ小さくすべきだと言われました。キーは必要なだけ大きくするべきだと思います。無意味なフィールドを無作為にテーブルに追加することは避けるべきです。無作為に追加された無意味なフィールドからキーを作成するのはさらに悪いことです。特に、別のテーブルから非主キーへの結合依存関係を破棄する場合はなおさらです。これは、テーブルに適切な候補キーがない場合にのみ妥当ですが、すべてのテーブルに使用すると、スキーマ設計が不適切であることを示しています。
また、主キーの更新は常に問題外であるため、主キーは決して変更されるべきではないとも言われました。ただし、更新は、削除の後に挿入することと同じです。このロジックにより、1 つのキーを持つテーブルからレコードを削除してから、2 番目のキーを持つ別のレコードを追加することは決してありません。サロゲート主キーを追加しても、テーブルに他のキーが存在するという事実は削除されません。テーブルの非主キーを更新すると、他のテーブルが代理キーを介してその意味に依存している場合 (たとえば、ステータスの説明が「処理済み」から「キャンセル済み」に変更された代理キーを持つステータス テーブル)、データの意味が破壊される可能性があります。 ' は間違いなくデータを破損します)。常に問題外であるべきことは、データの意味を破壊することです。
そうは言っても、今日のビジネスに存在する多くの設計が不十分なデータベース (意味のない代理キー付きデータ破損 1NF 巨獣) に感謝しています。これは、適切なデータベース設計を理解している人々の仕事が無限にあることを意味するためです。 . しかし、悲しいことに、それは私をシーシュポスのように感じさせることもありますが、彼は (クラッシュの前に) 401k を 1 つ持っていたに違いありません。データベース設計に関する重要な質問については、ブログや Web サイトには近づかないでください。データベースを設計している場合は、CJ Date を参照してください。SQL Server の Celko を参照することもできますが、最初に鼻をかむ場合に限ります。Oracle 側では、Tom Kyte を参照してください。