mysql - 更有效地存储逗号分隔的字符串

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将如何使用它.

谢谢,

Amb*_*ber 9

为什么不规范你的桌子?有一个简单匹配数字对的表 - 一个是玩家的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拥有的区域"无需亲自手动解析任何东西 - 数据库可以为您进行处理.