其实我想保存游戏的基本能力。我有两个选择,就是保存一个非常长的字符串,如[{' baseId':1,' baseName':' xyz'},{&#39 ; //',' //',' etc'}]或第二个选项是将这些类型的记录保存在多个行和列中。或者如果有人有更好的选择,你可以建议我并提前感谢。 :)
答案 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直接检查细节,但是如果将来为某些字符添加了额外的功能,则不需要更改任何表,只需添加一些额外的数据。