什么是在mysql表中存储数据的更好方法?

时间:2016-11-21 17:36:16

标签: php mysql sql laravel bigdata

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

3 个答案:

答案 0 :(得分:1)

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

在字段中存储复杂的JSON(或其他类型)对象是合理的事情。但是,您需要确保以下内容:

  • 仅检索字段以传递回调用应用程序。
  • 该字段永远不会用于过滤结果。
  • 永远不需要该领域的组成部分。

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

换句话说,该字段是一个"黑盒子"或者" blob"这对数据库没有任何意义。

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

答案 1 :(得分:0)

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

简而言之,这取决于阅读的简易性和WRITES的易用性。

如果您认为这些数据总是作为一个整体JSON被检索并被编写为整体,那么您可能希望使用MySQL JSON Data Type甚至类似varchar。

否则将字段映射到新表并存储为行。在这里你最好用一行代表一个对象而不是复杂化并将字段跨越到行。再次将您的READ和WRITE用例视为部分或完整实体。

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

另一方面也是存储的有效性。有多少条记录?数据类型会影响此blob类型TINYTEXT和LONGTEXT 在存储方面有所不同。

需要考虑所有这些问题。

答案 2 :(得分:0)

有第3个选项您可以将项目存储在多个表格中。

首先是您的主要表格,了解每个人都将拥有的基本细节。在这种情况下可能是名称和其他一些位。

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

第3个表每个字符有多行,每个字符对应一个特定字符所具有的每种能力。

这种方式可以使用SQL直接检查细节,但是如果将来为某些字符添加了额外的功能,则不需要更改任何表,只需添加一些额外的数据。