在我的空闲时间里,我开始用数据库后端编写一个小型多人游戏.我希望将玩家登录信息与其他游戏信息(库存,统计数据和状态)分开,而朋友提出这可能不是最好的主意.
把所有东西放在一张桌子上会更好吗?
首先忽略性能,然后创建最符合逻辑且易于理解的数据库设计.如果玩家和游戏对象(剑?棋子?)在概念上是分开的东西,那么将它们放在单独的表中.如果玩家可以携带东西,则将外键放在引用"玩家"表的"事物"表中.等等.
然后,当你有数百个玩家和成千上万的东西,玩家在游戏中跑来跑去做需要数据库搜索的事情时,如果你只是添加适当的索引,你的设计仍然会足够快.
当然,如果你计划成千上万的同时玩家,他们每个人每秒都会清点他的东西,或者可能是其他一些大量的数据库搜索(搜索图形引擎渲染的每一帧?)那么你需要考虑一下性能.但在这种情况下,无论你如何设计表,一个典型的基于磁盘的关系数据库无论如何都不够快.
关系数据库在集合上工作,数据库查询可以提供任何("未找到")或更多结果.关系数据库无意通过执行查询(关系)来始终提供一个结果.
说我想提一下现实生活;-).一对一关系可能有意义,即如果表的列数达到临界级别,则拆分此表可能会更快.但这种情况确实很少见.
如果你真的不需要拆分表,就不要这样做.至少我假设在你的情况下你必须选择两个表来获取所有数据.这可能比将所有内容存储在一个表中要慢.而且你的编程逻辑至少可以通过这样做来减少可读性.
伊迪丝说:评论规范化:嗯,我从来没有看到数据库规范化到它的最大值,没有人真的推荐这个作为选项.无论如何,如果你不确切知道以后是否会对任何列进行规范化(即放入其他表),那么使用一个表而不是"table"-one-to-one-"其他表"也更容易做到这一点"