mysql - MySQL - 多行或 JSON
问题描述
我正在 Laravel 中构建一个应用程序,并且有一个关于我的 MySQL 数据库的设计问题。目前我有一个表格,它定义了我游戏中所有默认角色的技能。因为特征是从技能池中提取的,并且数量可变,所以我的一张表看起来像这样:
+----+--------+---------+-----------+
| ID | CharID | SkillID | SkillScore|
+----+--------+---------+-----------+
| 1 | 1 | 15 | 200 |
| 2 | 1 | 16 | 205 |
| 3 | 1 | 12 | 193 |
| 4 | 2 | 15 | 180 |
+----+--------+---------+-----------+
请注意任何给定的可变行数CharID
。输入我的基本字符后,我的行数刚刚超过 300 行。
我的问题是存储用户的(自定义)角色副本。我认为每个用户存储 300 多行是没有意义的。我应该将此数据存储在另一个表中的 JSON Blob 中吗?我应该看看像 Mongo 这样的 NoSQL 解决方案吗?感谢指导。
注意:整个应用程序以使用角色的不同技能为中心。主要来自他们的报告,但用户也可以更新他们的 SkillScore(可能每周几次)。
附言。我是否应该考虑将每个角色分成自己的表格并以这种方式跟踪用户的角色?用户将无法添加/删除角色的技能,只能更新它们。
TIA。
解决方案
你的数据透视表对我来说看起来不错。
我会考虑删除 ID 列(除非你需要它),并使用复合主键:
PRIMARY_KEY(CharID, SkillID)
主键被索引,因此您将获得有效的查找。
至于您的其他建议,如果您将其存储在 JSON 列中,您将失去执行连接的能力,因此最终会执行更多查询。
推荐阅读
- .htaccess - I want a subdomain only accessible to some some specific computer in the local network
- ios - Framework Not supported in Simulator - Make Dummy Framework
- php - Wordpress:根据价格更改div的内容
- php - laravel 社交名媛 Facebook 登录
- c# - Call MySql stored procedure which take 2 parameters from asp.net core 2.2 web API controller
- javascript - If an element is nested below divs, when do we need to care about div classes when selecting?
- c - C standard library HTTP 301 Redirect using sockets on Objective-C
- php - TypeError:在未使用 $.post() 方法实现接口 FormData 错误的对象上调用了“附加”
- python - 如何使用具有相同范围的 2 个变量进行 for 循环?
- c# - 如何在 ASP.NET MVC 上将 Content-Type 设置为完全“文本/纯文本”?