MySQL中的数组?
我有一个格式如下的数据库:MySQL中的数组?,mysql,sql,arrays,storage,Mysql,Sql,Arrays,Storage,我有一个格式如下的数据库: URLID USERNAME URL 0 jake abc.com 1 jake 123.com 2 po google.com 3 po googl3.com 4 po ranoutoffakeurlslol.com USERNAME URLS jake {abc.com, 123.com} po
URLID USERNAME URL
0 jake abc.com
1 jake 123.com
2 po google.com
3 po googl3.com
4 po ranoutoffakeurlslol.com
USERNAME URLS
jake {abc.com, 123.com}
po {google.com, googl3.com, ranoutoffakeurlslol.com}
但是,我希望它是这样的:
URLID USERNAME URL
0 jake abc.com
1 jake 123.com
2 po google.com
3 po googl3.com
4 po ranoutoffakeurlslol.com
USERNAME URLS
jake {abc.com, 123.com}
po {google.com, googl3.com, ranoutoffakeurlslol.com}
我该怎么做?如果这是不可能的,那么,我如何才能使方法1更有效?
提前谢谢 由于这是一对多关系(即,one用户可以与manyURL关联),您应该创建一个单独的表来存储URL:
URLID USERNAME
1 jake
2 po
URLID URL
1 abc.com
1 123.com
2 google.com
2 googl3.com
2 ranoutoffakeurlslol.com
我个人不想建立后一种格式的数据库,因为无论何时你想从中提取数据,它都会带来大量的格式问题 通常,我要做的是将数据分成两个或三个表,这取决于用户名是否可以与同一URL关联。如果他们不能(一对多关系) 我将构建两个表:
USERS
USERID USERNAME
0 jake
1 po
URLS
URLID USERID URL
0 0 abc.com
1 0 123.com
2 1 google.com
3 1 googl3.com
4 1 ranoutoffakeurlslol.com
或者,如果URL可以有不同的用户(多对多),则用户将是相同的,但URL将是:
URLS
URLID URL
0 abc.com
1 123.com
2 google.com
3 googl3.com
4 ranoutoffakeurlslol.com
还有第三张桌子可以加入他们
USERURLS
USERID URLID
0 0
0 1
1 2
1 3
1 4
这种方式看起来有点复杂,但重复的数据较少(只使用整数而不是字符串),而且以后更容易扩展,比如说,如果您想在用户名中添加地址、电话号码、密码或其他内容。如果您不熟悉关系数据库的范式(NF),我会研究它们。()它的效率不亚于通过某种字符串操作提取值。要使列表保持排序,您应该在URL列上创建聚集索引。Ohhh聚集索引。谢谢用命令式编程语言的方式来思考RDBMS通常不是一个好主意。在Java等语言中,数组访问速度很快,集合中的查找速度较慢。然而,RDBM是专门为表引用查找而设计和优化的,并且在这方面做得相当好。RDBMS中的列数组比表引用查找更快的原理很可能是错误的。据我所知,MySQL不支持列数组上的SQL规范。PostgreSQL和HSQLDB都支持它们。这会比上面描述的方法更好吗?如果我只有以下两个表:USERID | USERNAME和=>USERID | URL,这似乎更节省空间。对于一对多,它们是相同的解决方案。您的数据是否可以在唯一用户之间重复url?例如,杰克有abc.com。有可能po也有abc.com吗?我实际上有两条数据,其中一条可以重复url。对于url重复的那个,我很可能会使用您的方法。对于另一个,我将使用另一个。谢谢