2016-10-19 7 views
1

大きなテーブルとの外部キーの関係はパフォーマンスに影響しますか?大きなテーブルと小さいテーブルを持つ外部キー

CREATE TABLE CHARTOFACCOUNT --Contains all accounts 
(
    AccountNo VARCHAR(23) PRIMARY KEY, 
    --, 
) 

CREATE TABLE DEPOSITACCOUNT --Contains all deposit accounts(row less than CHARTOFACCOUNT) 
(
    AccountNo VARCHAR(23) PRIMARY KEY, 
    --, 
) 

CREATE TABLE DEPOSITACCOUNTSTATUS --Contains all Deposit account status 1 to 1 relation 
(
    AccountNo VARCHAR(23) PRIMARY KEY, 
    --,  
) 

DEPOSITACCOUNTCHARTOFACCOUNTと外部キーの関係を持っています。今度はDEPOSITACCOUNTSTATUSになると、DEPOSITACCOUNTまたはCHARTOFACCOUNTと外部キー関係が成立し、両方が有効になります。しかしCHARTOFACCOUNTにはDEPOSITACCOUNTより多くの行が含まれているため、パフォーマンス上の問題はありますか?

+0

どのdbmsを使用していますか? (パフォーマンスに関する質問はほとんど常に製品固有です) – jarlh

+0

現在MS SQL Server 2012およびそれ以降のバージョンですが、別の問題があるかどうかを知りたい場合 – Esty

+0

整数の主キーがvarcharsよりも優れています。 –

答えて

1

これは時期尚早の最適化の場合のようです。

モデル化しようとしているシステムに基づいて外部キーを選択してください。と思うだけでなく、パフォーマンスが問題となる可能性があります。

あなたは言う:

私はDEPOSITACCOUNTまたは CHARTOFACCOUNTと外部キーの関係を作ることができ、両方ともこれは私があなたのデザインに問題がある可能性が考えさせる

有効となります。 CHARTOFACCOUNTテーブルストアはDEPOSITACCOUNTテーブルとは何ですか?

預金口座が他の口座タイプと異なる扱いをするのはなぜですか?型を属性としてAccountテーブルに格納しないでください。

預金口座のステータスがアカウント自体とは別に保存されているのはなぜですか?テーブル間に1対1の関係がある場合、その情報をAccountテーブルに移動することができます。

+0

look 'CHARTOFACCOUNT'は全ての口座とその共通情報を含みます。' DEPOSITACCOUNT'には預金口座と預金口座のみが含まれています。デザイン上の問題はありません。設計上の問題は、「DEPOSITACCOUNTSTATUS」テーブルと「DEPOSITACCOUNT」テーブルを同じ行数の1〜1を含むようにマージすることです。しかし、このテーブルでは、「DEPOSITACCOUNTSTATUS」と結合する方が良いでしょうか? – Esty

+0

アカウントステータスを入金テーブルに結合したくない場合は、論理的には、 'DEPOITACCOUNT'テーブルへの外部キーが必要です。結局のところ、預金口座のステータスです。 – Tony

+0

ええ、現時点ではそれもそうでした。しかし、「CHARTOFACCOUNT」にはすべての預金口座が含まれているため、「DEPOSITACCOUNT」ではなく「DEPOSITACCOUNT」の代わりにそれを使用すると、データの完全性は損なわれません。しかし、ここにキャッチはありますか? – Esty

1

基本的に、同一の主キーを持つ3つのテーブルがあります。これらのテーブルをクラスタード・インデックスにすると、テーブル間のアクセスは非常に高速になります。

関係を設定して理にかなっている必要があります。命名規則から、私はDepositAccountStatusDepositAccountに関連していると推測します。したがって、私はそのテーブルに外部キーの関係を置くでしょう。

これはパフォーマンス上の問題ではありません。これは単にデータを正しくモデリングすることです。

もう1つの質問は、ステータステーブルがDepositAccountと同じ主キーを持つ理由です。なぜそのテーブルにステータスを直接置くだけではないのですか?

+0

正確なポイントボスをヒットします。異なる 'DEPOSITACCOUNTSTATUS'テーブルを使用することは、実際には悪い設計です。 – Esty

関連する問題