2

我有一个格式如下的数据库:

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更有效?提前致谢!

4

2 回答 2

1

由于这是一对多的关系(即一个用户可以与多个URL 相关联),您应该创建一个单独的表来存储 URL:

URLID   USERNAME
1       jake
2       po

URLID   URL
1       abc.com
1       123.com
2       google.com
2       googl3.com
2       ranoutoffakeurlslol.com
于 2013-08-06T19:40:27.413 回答
0

我个人不希望以后一种格式设置数据库,因为每当您想从中提取数据时,它都会引入大量格式问题。

通常,我会做的是将数据拆分为两个或三个表,具体取决于用户名是否可以与相同的 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 可以有不同的用户(多对多),则 USERS 将是相同的,但 URLS 将是:

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),我会研究它们。(维基百科文章

于 2013-08-06T19:50:12.510 回答