2011-05-05 148 views
0

我现在有3个表,关系数据库设计用MySQL,

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

和1位表。

Positions (Id, Coordinate, TypeId) 

PositionId,在我的3个表中,是我的位置表中的外键。

我想用一个单一的位置表,如上图所示,正常化所有我的位置数据。我面临的问题是我必须确定一种类型,以便在执行查询时知道要查询哪个表。

例如

SP -- GetObjectByPosition (positionId) 

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

这对我来说似乎是不好的设计。唯一的解决办法就是让我有3张独立的桌子。

UserPositions 
MonsterInstancePositions 
TreasureInstancePositions 

但是,我并不总是有兴趣提取用户,怪物或宝藏数据。有时我只想要位置ID和位置 - 这意味着三张桌子,我必须做一个工会。

有没有更好的方法来做到这一点?

回答

1

用户,MonsterInstances,TreasureInstances可以改写为单个“ObjectInstances”表,其包括类型列。然后,将工作对那些3个表单独查询,反而会努力反对ObjectInstances和typeid的,引用新OjbectTypes表。合理?

+0

是的,这有一定道理。 – 2011-05-05 15:40:24