2009-05-27 5 views
2

J'ai une colonne groupes. Les groupes ont un type différent stocké dans group_types (acheteurs, vendeurs, arbitres). Seulement quand le groupe est de type acheteur il a un autre type (plus spécialisé) comme électrique et mécanique.structure du modèle de base de données

Je suis un peu perplexe avec la façon dont je vais stocker cela dans une base de données. Quelqu'un peut me suggérer une structure de base de données?

Quelqu'un peut me suggérer une structure de base de données?

grâce

Répondre

3

hébergerons vos group_types comme une table hieararchical (avec nested sets ou parent-child modèle):

Parent-child:

 
typeid parent name 

1  0  Buyers 
2  0  Sellers 
3  0  Referee 
4  1  Electrical 
5  1  Mechanic 
SELECT * 
FROM mytable 
WHERE group IN 
     (
     SELECT typeid 
     FROM group_types 
     START WITH 
       typeid = 1 
     CONNECT BY 
       parent = PRIOR typeid 
     ) 

sélectionnera tous les acheteurs dans Oracle.

Nested sets:

 
typeid lower upper Name 
1  1  2  Buyers 
2  3  3  Sellers 
3  4  4  Referee 
4  1  1  Electrical 
5  2  2  Mechanic 
SELECT * 
FROM group_types 
JOIN mytable 
ON  group BETWEEN lower AND upper 
WHERE typeid = 1 

sélectionnera tous les acheteurs dans une base de données.

Nested setsNested sets est implémentable partout et plus performant, si vous n'avez pas besoin d'ordre hiérarchique ou de mises à jour fréquentes sur group_types.

Parent-child est implémentable facilement dans Oracle et SQL Server et avec un petit effort dans MySQL. Cela permet un changement de structure facile et un ordonnancement hiérarchique.

Voir cet article dans mon blog sur la façon de mettre en œuvre dans MySQL:

0

Vous pouvez éventuellement stocker d'autres types comme, buyer_mechanical ou buyer_electrical.

0

Vous pouvez essayer:

Group 
group_id 
group_name 
group_parent_id 

with entries (1, buyers, 0), (2, sellers, 0), (3, referee, 0), (4, electrical, 1), (5, mechanical, 1) 

Cela a l'avantage d'être infiniment évolutive, de sorte que chaque sous-groupe peut avoir autant de sous-groupes que vous le souhaitez.

0

Généralement, vous avez des tables d'extension.Ce sont simplement des tables supplémentaires dans votre schéma qui contiennent des informations supplémentaires liées à la table principale par un certain type de clé

Par exemple, disons que votre table principale est:

People 
    PersonId int, PK 
    GroupTypeId int, FK to GroupTypes 
    Name varchar(100) 

GroupTypes 
    GroupTypeId int, PK 
    GroupTypeName varchar(20) 

BuyerTypes 
    BuyerTypeId int, PK 
    BuyerTypeName varchar(20) 

BuyerData 
    PersonId int, FK 
    BuyerTypeId int FK 

==== De plus, la BuyerData aurait une clé primaire composite (PK) sur personID et BuyerTypeId

Lors du retrait des données acheteur, vous pouvez utiliser une requête comme

SELECT * 
    FROM People P 
    INNER JOIN BuyerData BD on (P.PersonId = BD.PersonId) 
    INNER JOIN BuyerTypes BT on (BD.BuyerTypeId = BT.BuyerTypeId) 
0

groupType: ID, Nom ('acheteurs', 'vendeurs', 'arbitre')

groupe

: GroupTypeID, ID, le nom ('électrique' et 'mécanique' si grouptypeid == 'acheteurs')

contact: GroupTypeID (NOT NULL), GroupID (NULL), autres attributs

Le groupe de tables contient des enregistrements pour GroupTypes selon les besoins. Contact.GroupID peut être NULL car un GroupType n'a besoin d'aucun groupe.

L'interface utilisateur doit prendre en charge la sélection de groupe. Vous pouvez avoir un déclencheur vérifier la logique de groupe/type.

Questions connexes