我发布了一周左右的数据库结构,我正在尝试构建。我没有完全了解它的复杂性,所以这就是我重新发布的原因。在示例中,我使用CD集合作为示例。
我知道我需要一个查找表来说出我的流派或出版商。这不是一件很重要的事情。
但是这个项目中有八个查找表,其中一些表中有150个条目。据我所知,我需要一个单独的CD条目及其数据排列。因此,如果我在查找表中平均说出20个条目,则每张CD的20 x 20 x 20 x 20 x 20 x 20 x 20 x 20个排列。还是我误会了?如何有效地创建一个主表来提取所有数据,而不需要为每个排列设置单独的行。我是否需要编写一些更复杂的SQL来管理所有这些?
帮助!
答案 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>