Mar*_*ark 0 mysql database database-design
我正在开发一个应用程序,用户可以"争取"拥有地图的大部分内容.每张地图由1000个地区组成.现在我的初步计划是将用户拥有的区域存储为逗号分隔的字符串,例如
用户拥有区域1到10 1,2,3,4,5,6,7,8,9,10
问题是用户可能拥有所有1000个,这意味着它可能是一个长度为3893个字符的字符串...我将其存储为varchar(3893)...这看起来非常低效.
我确实考虑过二元解决方案,例如
1111111111接着是990 0
这是一个很好的解决方案,如果只有一个用户拥有整个网格因为这是1000个字符,但它的4个或更多那么它的效率较低.
此外,我需要考虑一种易于计算回逗号分隔字符串的方法,因为这是我的javascript将如何使用它.
谢谢,
为什么不规范你的桌子?有一个简单匹配数字对的表 - 一个是玩家的ID,另一个是区域的ID.如果玩家控制5个区域,则表格中将有5行.如果他们控制1000,他们有1000行.这就是关系数据库的设计和优化方式.
例:
table `users`:
ID Name
------------
1 John
2 Jessie
3 James
table `regions`:
ID Name
------------
1 France
2 China
3 Australia
table `ownership`:
Owner Place
------------
1 1
1 3
3 2
Run Code Online (Sandbox Code Playgroud)
因此,约翰目前拥有法国和澳大利亚,詹姆斯拥有中国.
这不仅简化了您的列类型,而且由于它已经标准化,您可以在您可以运行的查询类型中具有更大的灵活性 - 例如,您可以询问"拥有X区域的人的名称是什么"或"多少"人们Y拥有的区域"无需亲自手动解析任何东西 - 数据库可以为您进行处理.
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |