首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于MySQL的关系型数据库设计

基于MySQL的关系型数据库设计
EN

Stack Overflow用户
提问于 2011-05-05 23:34:21
回答 1查看 159关注 0票数 0

我现在有3张桌子,

代码语言:javascript
复制
Users (Id, PositionId)
MonsterInstances (Id, PositionId)
TreasureInstances (Id, PositionId)

和1个位置表。

代码语言:javascript
复制
Positions (Id, Coordinate, TypeId)

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

我想使用一个单独的position表,如上所示,来标准化我所有的位置数据。我面临的问题是,我必须确定一个类型,以便当我的查询执行时,它知道要查询哪个表。

例如:

代码语言:javascript
复制
SP  -- GetObjectByPosition (positionId)

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

对我来说,这似乎是一个糟糕的设计。我能做的唯一的办法就是有3张分开的桌子。

代码语言:javascript
复制
UserPositions
MonsterInstancePositions
TreasureInstancePositions

然而,我并不总是对提取用户、怪物或宝藏数据感兴趣。有时我只需要位置Id和位置--这意味着对于三个表,我必须进行联合。

有没有更好的方法来做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-05 23:37:13

Users、MonsterInstances、TreasureInstances可以重写为包含一个类型列的单个"ObjectInstances“表。然后,将分别针对这3个表执行的查询将针对引用新OjbectTypes表的ObjectInstances和typeID执行。讲得通?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5900405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档