2017-02-08 14 views

答えて

0

誰もが、彼らは決して更新するつもりはありませんので、

は、いくつかのテーブルは、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つではなく、顧客用のデータベースを設計しました。これは私が「ポイントを作っている」ところでありましたが、そこにいる他のデータベース開発者にとっても同じことが当てはまるとは限りません。

2

TFSでは、多くのテーブルには、パフォーマンス制約に非常に特有の主キーも外部キーもありません。さらに、これらのデータベースは手動で更新されることは想定されていないため、TFSは独自のAPIを使用してこれらのテーブルのすべての変更を処理します。 Microsoftがこれらのテーブルに対して直接クエリをサポートしていない理由の1つです。

TFSのもう1つの理由は、クラウド対応のVisual Studio Team Servicesでは、すべてのデータをSQL Azureに格納するのではなく、テーブルストレージBlobストレージまたはDocumentDBに格納することです。

関連する問題