2016-03-23 5 views
-2

私のデータベースは本当に特別です。私のデータベースを特別な関係でデザインするには?

他のエンティティへのFKを含むエンティティ "スキャン"を持つ必要があります。

「他のエンティティ」は、Type1Entity、Type2Entity、Type3Entityなどの異なるエンティティに属する可能性があり、これらのエンティティは自分自身の間には関係がありません。

これは多対1の関係です。

たとえば、2つのエンティティ「スキャン」があります。 - FKがType2Entityに、2つ目がType3Entityになります。

誰も私の考えがありますか?ヌル値に Type1EntityID Type2EntityID Type3EntityID と3の2:

表3 FKと "スキャン":ところで

は、私はこれを行うにはしたくありません。

ありがとうございました!

答えて

0

ほとんどの場合、これらのエンティティテーブルをマージし、1つの補助フィールドを使用してそれらを区別することができます。

これを行うことができない場合、ほとんどの場合、このような場合、TypeXEntityテーブルの間にいくつかの共通フィールドがあります。

もしそうなら、それらのエンティティテーブルの共通部分を抽出し、新しいテーブルを作成します(EntityTypeCommonと呼ぶ)。その後、テーブルをスキャンするEntityTypeCommonからFKを作成しEntityTypeCommonするために、個々のエンティティテーブルからFKを作成

Scan(
    Id 
    Name 
) 

EntityTypeCommon(
    Id 
    ScanRef 
    ... 
) 

Entity1Type(
    Id 
    TypeEntityCommonRef 
    ... 
) 

Entity2Type(
    Id 
    TypeEntityCommonRef 
    ... 
) 

Entity3Type(
    Id 
    TypeEntityCommonRef 
    ... 
) 
1

最初はデータベース設計が貧弱です。 Entityの種類によって異なる表を使用しないでください。代わりに、列EntityTypeIdを使用するすべてのEntityの単一の表を作成します。次に、EntityTypeの別のテーブルを作成します。このように:

Entity 
    Id    INT 
    EntityTypeId INT 
    --Other columns 

EntityType 
    Id  INT 
    --Other columns 

Scan 
    Id   INT 
    EntityId INT 
    --Other columns 

次に、あなたはEntityIdスルーScan上のFKを持つことができます。

-1

などのType1、Type2の、タイプ3、クラス/サブクラスの代表格であるか、あなたが好む場合は、タイプ/サブタイプ。これらのケースは何十年にもわたって深く研究されており、以前に行った人から学ぶことで恩恵を受けることができます。まず、これらの3つのタグを見て、質問、回答、および情報タブの説明を調べることをお勧めします。

関連する問題