MySQL-多行或JSON
我正在Laravel中构建一个应用程序,对我的MySQL数据库有一个设计问题。 目前我有一个表,它定义了我游戏中所有默认角色的技能。因为这些特征是从技能库中提取出来的,并且有一个可变的数字,所以我的一个表如下所示:MySQL-多行或JSON,mysql,database,laravel,Mysql,Database,Laravel,我正在Laravel中构建一个应用程序,对我的MySQL数据库有一个设计问题。 目前我有一个表,它定义了我游戏中所有默认角色的技能。因为这些特征是从技能库中提取出来的,并且有一个可变的数字,所以我的一个表如下所示: +----+--------+---------+-----------+ | ID | CharID | SkillID | SkillScore| +----+--------+---------+-----------+ | 1 | 1 | 15 |
+----+--------+---------+-----------+
| 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“速度慢”并不意味着它不能完成它的设计目的:以可访问的方式存储大量关系数据。