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