将数据存储在mysql表中的更好方法是啥? [关闭]

Posted

技术标签:

【中文标题】将数据存储在mysql表中的更好方法是啥? [关闭]【英文标题】:what is the better way to store data in mysql table? [closed]将数据存储在mysql表中的更好方法是什么? [关闭] 【发布时间】:2016-11-21 17:36:15 【问题描述】:

其实我想为游戏保存基础能力。我有两个选择,一个是保存一个非常长的字符串,例如 ['baseId':1, 'baseName': 'xyz','//', '//', 'etc'] 或第二个选项是将这些类型的记录保存在多行和多列中。或者,如果有人有更好的选择,您可以建议我并提前致谢。 :)

【问题讨论】:

这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。 @DarylGill 我不同意。既然他专门标记了mysql,那么我认为数据不应该这样存储。如果他想以这种格式存储序列化数据,那么他可能应该使用 nosql 之类的东西。 @bassxzero 这可能是真的,具体细节还没有说清楚,op 给出了两种可能的选择并要求“更好”。也许基于意见的关闭可能不是最好的,恕我直言,要么是那样要么太宽泛 可能过于宽泛,可能会吸引基于意见的答案。它也可能是这个问题***.com/q/15367696/1048425 的重复,我认为在大多数情况下,评分最高的答案完美地总结了要么使用适当的 NoSQL 解决方案,要么使用每行/列一个值的关系数据库 【参考方案1】:

这是一个常见问题。正常的答案是:“使用应使用的关系数据库,具有明确定义的列和行。”也就是说,您的第二个选择。

在字段中存储复杂的 JSON(或其他类型)对象可能是合理的做法。但是,您需要确保以下几点:

仅检索该字段以传回调用应用程序。 该字段永远不会用于过滤结果。 永远不需要该字段的组件。

(我可以专门为 JSON 添加,由于 JSON 支持,第三个可以在最新版本的 MySQL 中放宽。)

换句话说,该字段是对数据库没有意义的“黑盒”或“blob”。

您的值似乎与数据库中的存储相关。我的反应是你应该解析这些值并以更正确的关系格式存储它们。

【讨论】:

【参考方案2】:

这是一个典型的面向对象的关系映射问题。

简而言之,这取决于读取的难易程度和写入的难易程度。

如果您认为这些数据总是作为一个完整的 JSON 被检索并被写入一个整体,您可能想要使用 MySQL JSON Data Type 甚至是类似 varchar 的类型。

否则将字段映射到新表并存储为行。在这里,用一行代表 1 个对象可能会更好,而不是进一步复杂化并将字段跨越到行。再次查看关于部分或完整实体的 READ 和 WRITE 用例。

然后需要考虑一个编程模型 - 哪种模型可以让您的代码保持简单且不易出错。

另一方面是存储的效率。将存在多少条记录?数据类型会影响这一点,例如blob 类型 TINYTEXT 和 LONGTEXT 在存储方面有所不同。

所有这些问题都需要考虑。

【讨论】:

我为此使用了 varchar。你觉得怎么样,听起来好还是不好? varchar【参考方案3】:

还有第三个选项,您将项目存储在多个表中。

首先是您的主表,其中包含每个人都会拥有的非常基本的细节。在这种情况下,可能是名称,以及其他一些位。

第二个表格包含每个角色可能拥有或不拥有的所有能力的列表。

第 3 个表格中每个角色都有多行,每个角色对应一个能力。

这种方式可以直接用SQL查询细节,但是如果以后为某些字符增加额外的能力,就不需要任何表的改变,只是增加一点额外的数据。

【讨论】:

以上是关于将数据存储在mysql表中的更好方法是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将数千条记录插入表中的最有效方法是啥(MySQL,Python,Django)

哪个更好?在 MySQL 中的磁盘文件或临时表中缓存

在 MySQL 表中存储英文和中文字符的正确字符集是啥?

在 MySQL 中存储相当大的 JSON 对象的最佳方法是啥

大型 MySQL 数据库 [关闭]

从sql列中拆分数据并将其保存在sql存储过程中的另一个表中的最有效方法是啥[重复]