2009-02-27 11 views
3

私はフィールドの束を持っているテーブルがあります。フィールドは、ジョブのプロジェクトマネージャ情報などの論理グループに分割できます。グループ化自体は実際にはエンティティ候補ではなく、独自のPKを持つべきではありません。dbテーブルの1対1リレーションシップはにおいですか?

これをグループ化するには、フィールドにプレフィックス(たとえばPmFirstName)が付いていますが、メインテーブルの1:1リレーションを持つ複数のテーブルに分割することを検討しています。

私はこれを行う際に注意すべきことはありますか?これはちょうど貧しい選択ですか?

私のクエリは、すべての余分な結合でより複雑になるかもしれませんが、それは正しいビューで軽減できますか? 100k未満のレコードを持つテーブルについて話している場合、これはパフォーマンスに顕著な影響を及ぼしますか?

編集:私は非実体候補者の考えをもう少し正当化します。この情報はユーザベースで入力します。彼らは互いに知り合いません。したがって、同じユーザーが同じ「projectManager名」を提出する可能性があります。また、この時点でどの制約に違反していないものでも可能です。別のユーザーからのエントリを関連付ける場合は、後でパイプラインを決定する必要があります。これらのものに自分の鍵を与えるなら、彼らは本質的に同じエンティティの一部であるため、メインテーブルが成長するのと同じ割合で成長するでしょう。 no ptでは、利用可能な「プロジェクトマネージャー」のリストからユーザーを選択します。

上記のように、私はエンティティではないと思います。しかし、もしかしたらそうではないかもしれません。

+0

DUPE:http://stackoverflow.com/questions/517417/is-there-ever-a-time-where-using-a-database-11-relationship-makes-sense –

+0

"1:1リレーションシップ"その結果をもたらさなかった。詐欺のために申し訳ありません –

答えて

4

特定のパフォーマンス上の理由がない限り、通常1対1の関係は使用しません。たとえば、頻繁に使用される大量のテキストやBLOB型フィールドを別のテーブルに格納するなどです。

私はここに何か他のものがあると思うでしょう。この例では、PmFirstNameを指定すると、 "ProjectManagers"または "Employees"テーブルに関連するpm_idが1つあるはずです。これらのグループのどれも本当にエンティティ候補ではないと確信していますか?

+2

SQL Server?ブロブは通常のページの外に保存されるので、別のテーブルに入れる必要はありません。 –

2

私にとって、いくつかの行やクエリで余分な列に興味がない限り、彼らは匂いがする。例えばクエリの大部分がPmFirstName列を選択していない場合、または大きな列のサブセットの場合はNULLがNULLの場合

私は匂いのタグが好きです。

0

なぜフィールド群がエンティティ候補ではないと感じますか?彼らがそうでなければ、接頭辞でそれらを識別しようとするのはなぜですか?

接頭辞を削除するか、独自の表に抽出します。

2

私は継承のような構造のために1対1の関係を使用します。

たとえば、すべての債券には、CUSIP、クーポン、DatedDate、およびMaturityDateのようないくつかの基本的な情報があります。これはすべてメインテーブルにあります。

現在、各タイプの債券(財務省、法人、Muni、代理店など)には、独自の独自の列があります。

これまでは、すべての情報を持つ非常に広いテーブルが1つしかありませんでした。今では、型固有の情報を別々のテーブルに分割して、より良いパフォーマンスを提供します。

今のところ、フィールドをグループ化するには、プレフィックス(たとえばPmFirstName)がありますが、メインテーブルの1:1リレーションを持つ複数のテーブルに分割することを検討しています。

人のテーブルを作成すると、すべてのデータベースでこれが必要です。次に、あなたのプロジェクトテーブルにPMKeyという名前の列があり、personテーブルを指しています。

0

他の場所で使用できる独立した論理エンティティの場合は、別々のテーブルに分割することが重要です。

"プロジェクトマネージャー"は現在すべてのプロジェクトで1:1になることができますが、後でプロジェクトマネージャーに複数のプロジェクトを持たせたいと思うかもしれません。 余分なテーブルを持っているのは良いです。

あなたがPrimaryFirstName、PrimaryLastName、PrimaryPhone、SecondaryFirstName、SecondaryLastName、SEcondaryPhone

を持っている場合はあなただけのFirstName、LastNameのと "人" のテーブルを持つことができ、電話

その後、元の表は、「PrimaryIdを必要とします「SecondaryId」列を使用して、以前に取得した6列を置き換えます。

また、SQLを使用すると、物理的な場所にまたがるファイルグループとテーブルを分割できます。 したがって、1:1の関係を持つPOSTテーブルとCOMMENTテーブルを持つことができますが、COMMENTテーブルは別のファイルグループにあり、より多くのメモリを持つ別の物理ドライブにあります。

1:1は必ずしも匂いがない。それが目的を持っていない限り。

関連する問題