これは愚かな質問かもしれません。SQL Serverテーブル設計のアドバイス
これらのサーバーは今後数カ月間で2014年にアップグレードされますが、SQL Server 2008 R2の効率に関するアドバイスもあります。私は3つのテーブルを作成しています。
t1
は、様々なタイプの多くの列と主キーであるアイデンティティの数値IDを持っています。私はこのテーブルが1000の低い行に入ることを期待しています。t2
は、t1と1対多の関係にあります。主キーはt2 IDとt1 IDの複合です。 t2数値IDはフロントエンドアプリケーションによって送信され、t1 IDごとに一意になります。私はこのテーブルが50000+の行に到達することを期待しています。これらの2つのIDの他に、さまざまな長さのvarcharカラムがいくつか含まれています。t3
は、t2と1対多の関係にあります。プライマリキーは、t3 ID、t1 ID、およびt2 IDのコンポジットです。再び、t3数値IDはフロントエンドアプリケーションによって送信され、t2 IDごとに一意になります。私はこのテーブルが数百万行に達することを期待しています。これらの3つのID以外に、少数の日付または数値列が含まれます。私はt3は、本質的にT3の主キーは、T3のIDとt2からのID列、つまり、2列の代わりに、3になることを意味するために参照するID列を設定する必要があります私の質問をt2内にある
。これはより効率的でしょうか? t2内のこのID列にインデックスを付ける必要がありますか?ジョインを助ける?
私は何か他のことをしていますか?
どのような検索が最も頻繁に実行されますか?あなたは 't1'または' t2'キーを使って 't3'を探しますか、他のフィールドのデータを使うのですか?あなたの答えは、サロゲートキーまたはナチュラルキーをより良い選択にするかもしれません。 – Tony
** ** t2 **と** t3 **の両方で、検索は個別に実行されることはありませんが、これは疑いがありますが、今後これが発生する可能性があります。これらのテーブルに対するクエリは、** t1 **への結合によって駆動されます。大部分の日中の検索は、1 t1レコードとそのt1 IDのt2にあるものとt1 | t2 IDのt3にあるものの大部分になります。 – Darybrain