2010-12-14 25 views
0

データベースモデリングにおける外部キーのテーブルインデックスに関する一般的な質問があります。私はテーブルを持っている場合は、として作成TABLE_A、:としてSQL Server 2005の外部キーとインデックス

CREATE TABLE [dbo].[TABLE_A](
[ID] [int] IDENTITY(1,1) NOT NULL, 
    [RelatedTableBID] [int] NOT NULL, 
    CONSTRAINT [PK__TABLE_A] PRIMARY KEY CLUSTERED 
    (
     [ID] ASC 
    ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
    ON [PRIMARY] 
) ON [PRIMARY] 

ALTER TABLE [dbo].[TABLE_A] WITH CHECK 
ADD CONSTRAINT [TABLE_A__RelatedTableB]  
FOREIGN KEY([RelatedTableBID]) 
REFERENCES [dbo].[TABLE_B] ([ID]) 

とTable_B:私は参照元テーブル上のインデックス(表A)参照を作成した場合

CREATE TABLE [dbo].[TABLE_B](
[ID] [int] IDENTITY(1,1) NOT NULL, 
    CONSTRAINT [PK__TABLE_B] PRIMARY KEY CLUSTERED 
    (
     [ID] ASC 
    ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
    IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
    ON [PRIMARY] 
) ON [PRIMARY] 

は、それが実際には、より効率的になります列(RelatedTableBID)?次のように:

CREATE INDEX TABLE_A_FK_INDEX1 on TABLE_A(RelatedTableBID) 

またはこれについて後で考えますか?参照されている列自体はクラスタ化されたインデックスなので、結合中には何も問題はないはずです。もしあれば、TABLE_Bからの削除だけがパフォーマンスの低下に敏感なようです。

私を真っ直ぐにしてくれてありがとうございます。一般的にはそう

-Mustafa

EDIT
、私が今までに参加したり照会するときに、一貫句、私はそれにインデックスを追加することを検討すべきであるところで、カラムを使用している場合は? What are some best practices and "rules of thumb" for creating database indexes?そのような音は、一般的に健全な決定です。

答えて

2

あなたは正しいです。外部キーのインデックスは、TABLE_AとTABLE_Bを結合する必要があるときはいつでも役立ちます。

0

いいえあなたが探しているのは、3番目のテーブルです。あなたが構築しようとしている多対多の関係であれば、3番目のテーブルがなければ、厄介なほど効率の悪いDBデザインを行うことはできません。したがって

: 表 'ユーザー':UID、最初、真ん中、最後 テーブル 'アドレス':などの援助、ストリート、市、州、国、 表に 'ユーザ・アドレス':ID、UID、援助

次に、3番目のテーブルの多対多の関連付けを行うことができます。これは、通常、データベースの正規化と呼ばれます。

それではようなものになり、クエリの連想クエリ:ユーザーから

SELECT *を、アドレス登録しようusers.uid =ユーザー-addresses.uid AND addresses.aid =ユーザー-addresses.aid ONユーザー-アドレスusers.uid =「1」またはその

のようなものはあなたのユーザーのためにすべてのユーザー情報とアドレスを与える..would「1」あなたが別の質問のためにこれを意味している場合

+0

わからない - 私はジョー・ステファネリは私が設定されていると思いますまっすぐ。 – Mustafakidd

関連する問題