2016-03-23 12 views
-2

Nun, meine Datenbank ist wirklich besonders. Der Teil, den ich nicht weiß, wie zu entwerfen ist der nächste:Wie gestalte ich meine Datenbank mit speziellen Beziehungen?

Ich brauche eine Entität "Scan", die eine FK zu einer anderen Entität enthalten wird.

Das Problem ist, dass die "andere Entität" aus verschiedenen Entitäten stammen könnte: Type1Entity, Type2Entity, Type3Entity und diese Entitäten haben keine Beziehung untereinander.

Es ist eine Viele-zu-Eins-Beziehung.

Also zum Beispiel möchte ich 2 Entitäten "Scan" haben: - eins mit einem FK zu Type2Entity und das zweite zu Type3Entity.

Hat jemand eine Idee für mich?

By the way, ich will nicht, dies zu tun haben:

Tabelle "Scan" mit dem 3 FK: Type1EntityID Type2EntityID Type3EntityID und 2 der 3 bis Nullwert.

Vielen Dank sehr!

Antwort

0

Die meiste Zeit können Sie diese Entity-Tabellen zusammenführen und ein zusätzliches Feld verwenden, um sie zu unterscheiden.

Wenn dies nicht möglich ist, gibt es in den meisten Fällen ähnliche Felder zwischen den TypeXEntity-Tabellen.

Wenn dies der Fall ist, lösen Sie den gemeinsamen Teil dieser Entity-Tabellen und erstellen Sie eine neue Tabelle (nennen Sie sie EntityTypeCommon). Dann erstellen FK aus EntityTypeCommon Tabelle zu scannen und dann FK aus den einzelnen Entity Tabellen erstellen EntityTypeCommon

Scan(
    Id 
    Name 
) 

EntityTypeCommon(
    Id 
    ScanRef 
    ... 
) 

Entity1Type(
    Id 
    TypeEntityCommonRef 
    ... 
) 

Entity2Type(
    Id 
    TypeEntityCommonRef 
    ... 
) 

Entity3Type(
    Id 
    TypeEntityCommonRef 
    ... 
) 
1

Sie haben schlechte Datenbank-Design an erster Stelle. Sie sollten nicht verschiedene Tabellen für verschiedene Typen von Entity verwenden. Erstellen Sie stattdessen eine einzelne Tabelle für alle Ihre Entity mit einer Spalte EntityTypeId. Erstellen Sie dann eine weitere Tabelle für EntityType. Wie folgt aus:

Entity 
    Id    INT 
    EntityTypeId INT 
    --Other columns 

EntityType 
    Id  INT 
    --Other columns 

Scan 
    Id   INT 
    EntityId INT 
    --Other columns 

Dann können Sie eine FK auf Scan-EntityId haben.

-1

Typ1, Typ2, Typ3, etc. sind ein klassischer Fall von Klasse/Unterklasse oder, wenn Sie es vorziehen, geben Sie/Untertyp. Diese Fälle werden seit Jahrzehnten eingehend untersucht, und Sie können davon profitieren, wenn Sie von denen lernen, die es vorher waren. Zunächst schlage ich vor, dass Sie sich diese drei Tags anschauen, die Fragen, die Antworten und auch die Beschreibung auf der Registerkarte "Informationen" studieren.

Verwandte Themen