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和位置 - 这意味着三张桌子,我必须做一个工会。
有没有更好的方法来做到这一点?
是的,这有一定道理。 – 2011-05-05 15:40:24