2011-05-05 5 views
0

J'ai actuellement 3 tables,Design base de données relationnelle MySQL

Users (Id, PositionId) 
MonsterInstances (Id, PositionId) 
TreasureInstances (Id, PositionId) 

et 1 table de position. PositionId, dans mes 3 tables, est une clé étrangère dans ma table de positionnement.

Je souhaite utiliser une seule table Positions, comme indiqué ci-dessus, pour normaliser toutes mes données de position. Le problème que je suis confronté est que je dois identifier un type de sorte que lorsque ma requête s'exécute, il sait quelle table à interroger.

par exemple.

SP -- GetObjectByPosition (positionId) 

IF TypeId = 1 
SELECT * FROM Users JOIN... WHERE PositionId = positionId 
ELSE IF TypeId = 2 
SELECT * FROM MonsterInstances JOIN... 

Cela me semble être un mauvais design. La seule façon de contourner ce que je peux comprendre serait d'avoir 3 tables séparées.

UserPositions 
MonsterInstancePositions 
TreasureInstancePositions 

Cependant, je ne suis pas toujours intéressé par l'extraction de données utilisateur, monstre ou trésor. Parfois, je ne veux que l'ID de position et l'emplacement - ce qui signifierait avec trois tables, je devrais faire un syndicat.

Y a-t-il une meilleure façon de procéder?

Répondre

1

Les utilisateurs, MonsterInstances, TreasureInstances pourraient être réécrits en une seule table "ObjectInstances" qui inclut une colonne de type. Ensuite, les requêtes qui fonctionneraient séparément par rapport à ces 3 tables fonctionneraient plutôt avec ObjectInstances et un typeID, référençant une nouvelle table OjbectTypes. Avoir du sens?

+0

Oui, cela a du sens. –

Questions connexes