MySQL-多行或JSON

MySQL-多行或JSON,mysql,database,laravel,Mysql,Database,Laravel,我正在Laravel中构建一个应用程序,对我的MySQL数据库有一个设计问题。 目前我有一个表,它定义了我游戏中所有默认角色的技能。因为这些特征是从技能库中提取出来的,并且有一个可变的数字,所以我的一个表如下所示: +----+--------+---------+-----------+ | ID | CharID | SkillID | SkillScore| +----+--------+---------+-----------+ | 1 | 1 | 15 |

我正在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解决方案吗?感谢您的指导

注意:整个应用程序都以使用角色的不同技能为中心。大多数情况下都是由他们报告,但用户也可以更新他们的技能分数(可能一周几次)

我应该考虑把每个字符分解到自己的表中,然后用这种方法跟踪用户的字符吗?用户将无法添加/删除角色的技能,只能更新它们


TIA.

我觉得你的透视表不错

<>我会考虑删除ID列(除非你需要它),并使用复合主键:

PRIMARY_KEY(CharID, SkillID)
主键被编入索引,因此您将获得高效的查找


至于您的其他建议,如果您将其存储在JSON列中,您将失去执行连接的能力,因此将执行更多查询。

只要您正确地索引了表,我认为每个用户有300行没有任何害处。MySQL可以轻松处理一张表中的数百万行。IIRC,Facebook在2014年之前的生产中使用MySQL。根据一些人的说法,MySQL“速度慢”并不意味着它不能完成它的设计目的:以可访问的方式存储大量关系数据。