将数据存储在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)