如何编码不断变化的字段数

时间:2017-04-24 19:46:21

标签: mysql

假设我正在尝试为科幻小说杂志建立一个归档数据库。我希望每个问题能够跟踪贡献作者和插图画家。我遇到的问题是问题#1可能有8个作者和10个插图画家,而#2有10个作者和14个插图画家,#3有6个作者和8个插图画家。我有来自问题表的外键,引用了作者和插图表。问题是我永远不知道每个问题我会有多少。我知道,骨头方式是创建20列用于跟踪潜在作者,另外20列用于插图画家,并使用BUNCH的空值填充表格,但我知道这不是最有效的。在我看来,有一种方法可以告诉SQL"对于记录#1创建8个作者列和10个插图专栏以及记录#2 10和14 ..."几乎像每个记录的插入表。我知道它在那里,但对于我的生活,我无法想到它。

如果有人能指出我正确的方向,我会很高兴自己做阅读和编码,我已经用尽所有不同的关键词,我可以想到用来自己搜索这个。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

不要创建列,使用查找表:

contributing_author_id int autoinc primary key
issue_num int foreign key
person_id int foreign key

Contributing_author_id只是一个代理主键 issue_num指向有问题的问题 person_id指向一个“人”表,在该表中,您可以使用适当的字段保留作者,插图画家等

您还可以使用issume_num / person_id字段作为主键,具体取决于此表的其他用途以及您的整体标准。

使用列这是一个非常糟糕的想法是值得的,因为它使您的SQL和报告远比它需要的工作和麻烦更多。避免使用表明这一点的例子。

答案 1 :(得分:1)

你可以把它分成几个表。

-- Magazine Issue
MagazineID (auto incrementing int primary key)
IssueID
Date
etc.

-- Person
PersonID (auto incrementing int primary key)
type (illustrator/author)
Name
etc.

-- MagazineIllustrator
MagazineIssue (foreign key to MagazineIssue)
PersonID (foreign key to Person)

--MagazineAuthor
MagazineIssue (foregin key to MagazineIssue)
PersonID (foreign key to Person)