2010-08-25 6 views
3

Comment est-ce que je modéliserais une relation entre plusieurs entités où une entité pourrait faire partie de deux hiérarchies séparées et non liées, et chaque entité pourrait être liée à 1 ou plusieurs autres entités d'une manière non hiérarchique? Je voudrais le faire dans seulement 2 ou 3 tables dans la base de données.Comment modéliser des entités de données avec plusieurs parents?

J'ai actuellement il modélisé en deux tables:

Entities 
---------------------------------------------------------------- 
ID       bigint  identity(1, 1) PK 
ParentID     bigint  null    FK 
Name      varchar(100) not null 
Description     varchar(256) null 

EntityRelationships 
---------------------------------------------------------------- 
LEntityID     bigint not null PK, FK 
REntityID     bigint not null PK, FK 
EntityRelationshipTypeID int  not null PK, FK 

Les deux colonnes, LEntityID et REntityID sont à la colonne FKs Entities.ID et ParentID est une FK à la colonne ID. Ce modèle fonctionnerait probablement bien, tant qu'une entité ne pourrait jamais avoir plus d'un parent. Je dois être en mesure de permettre à une entité d'avoir plus d'un parent.

Les touches naturelles sur les tables sont:

Entities: ParentID, Name 
EntityRelationships: LEntityID, REntityID, EntityRelationshipTypeID 

Oui, deux entités pourraient être liés les uns aux autres dans deux ou plusieurs types différents de relations.

Nous vous remercions de votre aide.

Répondre

1

Oui, vous pouvez le faire. Vous devez introduire un autre appel de table EntityParentRelation comme structure ci-dessous

EntityParentRelation 
-------------------------------------------------------------------------------- 
ID       bigint     identity(1,1) pk 
EntityID      bigint     not null  fk 
ParentID      bigint     not null  fk 

où les deux EntityID et ParentID sont fks à Entities.ID. Et supprimez ParentID des entités. Et une petite modification sur la relation dans EntityRelationships

Instaead de pointer fk à Entities, vous devez pointer fk à EntityParentRelation.ID pour LEntityID et REntittyID.

Espérons que cela aidera :).

Questions connexes