SQL表结构

时间:2011-03-16 22:13:29

标签: mysql

我发布了一周左右的数据库结构,我正在尝试构建。我没有完全了解它的复杂性,所以这就是我重新发布的原因。在示例中,我使用CD集合作为示例。

我知道我需要一个查找表来说出我的流派或出版商。这不是一件很重要的事情。

但是这个项目中有八个查找表,其中一些表中有150个条目。据我所知,我需要一个单独的CD条目及其数据排列。因此,如果我在查找表中平均说出20个条目,则每张CD的20 x 20 x 20 x 20 x 20 x 20 x 20 x 20个排列。还是我误会了?如何有效地创建一个主表来提取所有数据,而不需要为每个排列设置单独的行。我是否需要编写一些更复杂的SQL来管理所有这些?

帮助!

1 个答案:

答案 0 :(得分:1)

使用CD示例在SQL中链接表的简要概述。

每张光盘只能有1个标签。我们创建一个标签表,如下所示:

Label Table
LabelID     INT(11) NOT NULL auto_increment PRIMARY KEY,
LabelName   VARCHAR(255) NOT NULL, 

然后在CD表中我们有对Label的外部引用

In CD Table
LabelID     INT(11) NOT NULL,

当我们想要查看结果时,我们会加入...就像这样:

select *
from CD 
join Label on CD.LabelID = label.LabelID

一对多。

假设你有一对多关系,那么你需要一个加入表(我相信这是你感到困惑的地方。)

拳头我们有所有艺术家的艺术家表(请注意艺术家表中可以有更多数据 - dob,home town ......等。

Artist Table
ArtistID     INT(11) NOT NULL auto_increment PRIMARY KEY,
ArtistName   VARCHAR(255) NOT NULL DEFAULT ''

然后我们创建一个连接表。这将加入一张CD到许多艺术家。 CD可以在此表中包含一行或多行,表示CD上艺术家的每个链接。

CD2Artist Table
CDID    INT(11) NOT NULL,
ArtistID INT(11) NOT NULL

当然,我们需要CD的ID才能使用。     在CD表中

CDID     INT(11) NOT NULL auto_increment PRIMARY KEY

然后选择您说的特定CD的艺术家列表

SELECT artist.artistname 
from cd2artist
join artist on cd2artist.artistID = artist.artistID
where CDID = <put cd id here>