MySQL的关系数据库设计

时间:2011-05-05 15:34:21

标签: mysql relational-database

我目前有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和位置 - 这意味着有三个表,我将不得不做一个联盟。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

用户,MonsterInstances,TreasureInstances可以重写为包含类型列的单个“ObjectInstances”表。然后,分别对这3个表起作用的查询将对ObjectInstances和typeID起作用,引用新的OjbectTypes表。有意义吗?