繁体   English   中英

动态SQL表是个好主意吗?

[英]Dynamic SQL Tables A Good Idea?

我希望某个知识渊博的人能够为我解决所面临的问题。

我有一款游戏,其中我使用rails作为后端来处理许多任务,包括获取高分。 在游戏中,用户可以创建自己的关卡,其他用户随后可以在该关卡上玩。 我目前通过以下方式将分数存储在称为“分数”的表中

level_id:级别的ID

user_id:玩关卡的用户的ID

total_score:用户在该级别上获得的得分

每次用户完成一个级别时,都会显示该级别的高分,但是我看到的问题是,对于每个级别,我必须获取具有相应level_id的每个数据库条目,然后按降序对获取的条目进行排序总得分。 我觉得似乎有更好的方法,因为我目前必须对每个级别的每个分数进行排序,这似乎是重复的,而且我看到表中的条目很多,这可能会很慢,并获取level_id。

我想知道一种更好的方法是为每个级别创建一个表,该表可能包含user_id和total_score,并由total_score排序。 我觉得这将减少需要执行的排序过程的数量,但是我想知道在这种格式的数据库中是否有大量表存在不利之处,或者是否有其他可能的方法解决这个问题?

谢谢,

约翰

没有。

您当前的设计很可能已足够,并且每个级别使用一张表将带来的好处很少,但令人头疼。

基本上,ActiveRecord是围绕“固定”模式(在运行时不会更改)构建的,并且让每个模型实例占用其自己的表只是行不通。 相对数据库不是文档存储。

您将需要batsh * t crazy join来从多个级别提取信息,并且您基本上必须手动执行每种查询或编写自己的ORM。

您可以通过设置分数的默认顺序并加入来完成您想做的事情:

@level = Level.eager_load(:scores)
              .find(params[:id])

但是首先,您需要问自己这是否是过早的优化 过早的优化通常会导致对错误问题的错误答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM