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重复的那个,我很可能会使用您的方法。对于另一个,我将使用另一个。谢谢