我目前有3张桌子
Users (Id, PositionId)
MonsterInstances (Id, PositionId)
TreasureInstances (Id, PositionId)
和1个位置表。
Positions (Id, Coordinate, TypeId)
我的3个表中的PositionId是我的Position表中的外键。
我想使用一个Positions表,如上所示,以标准化我的所有位置数据。我面临的问题是我必须标识一个类型,以便在执行查询时知道要查询的表。
例如
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和位置-这意味着要使用三个表,我必须进行并集。
有一个更好的方法吗?
最佳答案
用户,MonsterInstances,TreasureInstances可以重写为包含类型列的单个“ ObjectInstances”表。然后,分别对这3个表起作用的查询将对ObjectInstances和一个typeID起作用,并引用一个新的OjbectTypes表。合理?