私はSAP
データベースとTFS
データベース(構成とコレクションの両方)にテーブルを見ましたが、それらは主キーが定義されていません。何故ですか?一般的なデータベースの一部のテーブルでプライマリキーが定義されていないのはなぜですか?
答えて
誰もが、彼らは決して更新するつもりはありませんので、
は、いくつかのテーブルは、PRIMARY KEYを必要としない...ので、ここに、まだこの答えをしようとしていない、とだけの小さなセットを持っているかもしれませんそれらのデータ(ルックアップテーブルなど)。これらのテーブルにインデックスがまったくない場合は、本質的にヒープですが、必ずしも悪いことではありません。
なぜすべてのテーブルにPRIMARY KEYが定義されているのですか?テーブルにUNIQUE CLUSTERED INDEXが設定されている場合は、PRIMARY KEYが行うすべての処理が行われ、NULL値の格納を許可するボーナスが追加されます。実装に応じて(たとえば、SQL Serverでは1つの "一意の" NULL値のみが許可され、他のRDBMでは複数の値が許可されます)、これはアプリケーションにとってはるかに良い一致である可能性があります。
たとえば、口座番号と口座名の2つの列を持つ表を作成するとします。一意であることを確認したいので、PRIMARY KEYアカウント番号を作成するとします。これで、アカウントを作成する時点では常にNULLアカウント番号が提供されるわけではないため、NULLアカウント番号を許可する必要があります。ちょうど名前のレコードを作成し、アカウント番号を埋め戻すという、奇妙な2段階のプロセスがあります。 PRIMARY KEYデザインに固執する場合は、IDENTITY列を追加し、これをPRIMARY KEYにしてから、同じ複数のアカウント番号を防ぐためにUNIQUE CONSTRAINTを追加する必要があります。
ここでは、どのようなクエリにもほとんど使用されない代理キーが残っているため、一意性を気にしなくても、おそらくパフォーマンスインデックスになります。
PRIMARY KEYではなくUNIQUE CLUSTERED INDEXがある場合は、テーブルを変更せずにこれを行うことができます.1人の顧客のみが同時にNULLアカウント番号を持つことができます(SQLの場合サーバ)。
私は数年前に200を超えるテーブルを持ち、プライマリキーは1つではなく、顧客用のデータベースを設計しました。これは私が「ポイントを作っている」ところでありましたが、そこにいる他のデータベース開発者にとっても同じことが当てはまるとは限りません。
TFSでは、多くのテーブルには、パフォーマンス制約に非常に特有の主キーも外部キーもありません。さらに、これらのデータベースは手動で更新されることは想定されていないため、TFSは独自のAPIを使用してこれらのテーブルのすべての変更を処理します。 Microsoftがこれらのテーブルに対して直接クエリをサポートしていない理由の1つです。
TFSのもう1つの理由は、クラウド対応のVisual Studio Team Servicesでは、すべてのデータをSQL Azureに格納するのではなく、テーブルストレージBlobストレージまたはDocumentDBに格納することです。
- 1. 一部のデータがデータベースに保存されないのはなぜですか?
- 2. JComboBoxのgetSelectedItem()が一般的ではないのはなぜですか?
- 3. リモートモバイルアプリのテストが一般的ではないのはなぜですか?
- 4. JUnitのアサートメソッドがJavaで一般的でないのはなぜですか?
- 5. 一般的なasp.netテーブルが表示されない
- 6. なぜfoldl1はFoldableに一般化されていないのですか?
- 7. 一般的なメソッドの定義
- 8. 一般的なビルドリクエストメソッドの応答が定義されていません
- 9. 一般的なC#WeakEventリスナーが機能しないのはなぜですか?
- 10. 方法で、一般的なパラメータで定義される一般的な復帰方法
- 11. なぜHaskellのタプルに「一般的な」アクセサ関数がないのですか?
- 12. C#一般的でないクラス構文エラーのある一般的なクラス定義
- 13. タイプがこの一般的なクランプ方法のために推論されないのはなぜですか?
- 14. インターフェイスの一般的な種類とインプリメンテーションの一般的でない種類
- 15. なぜContentChildが定義されていないのですか?
- 16. なぜコードバが定義されていないのですか?
- 17. なぜauth2が定義されていないのですか?
- 18. なぜpdoが定義されていないのですか?
- 19. 一般的なテーブルではないWebスクレイピングデータ - python
- 20. 一般的な "try/except"ブロックがPython TkInterコールバックに適用されないのはなぜですか?
- 21. はなぜ定義されていないのですか?
- 22. 一般的な型 - エンティティフレームワークの動的テーブル
- 23. 特定のクラスに対する一般的な制約は、なぜですか?
- 24. 安全でない一般的なキャストコレクション
- 25. 一般的なCコンパイラでは、出力にソースファイル名が含まれているのはなぜですか?
- 26. whileループの一般的な失敗:なぜですか?
- 27. オープン、クローズド、バインド、バインドされていない一般的なタイプ
- 28. Subversion - 外部のない一般的なフォルダを共有する
- 29. SQL - 一般的な列のないテーブルの結合
- 30. Facebookのアプリが一般公開されていないのはなぜですか?
質問は、TFS自体ではなく、SQL Serverのデータベース構造に関連しているようです。 – Chamberlain