2017-04-24 7 views
0

SFの雑誌のアーカイブデータベースを構築しようとしているとします。私は問題ごとに寄稿者とイラストレーターを追跡できるようにしたい。私は、第1号に8人の作家と10人のイラストレーターがいますが、#2には10人の作家があり、14人にはイラストレーターがあり、3人には6人の作家と8人のイラストレーターがいます。私は、Issuesテーブルの外部キーをAuthorsとIllustratorsのテーブルを参照しています。問題は、問題ごとにどれくらいの数があるかわからないことです。骨抜きの方法は、潜在的な著者を追跡するための20個の列とイラストレーター用の20個の列を作成し、テーブルにヌルの束を充填することですが、それは最も効率的ではないことがわかります。私には、「レコード#1は8つの著者列と10のイラストレーター列を作成し、レコード2は10と14を作成する」というSQLを伝える方法があるようです。私はそれがそこにあることを知っているが、私の人生のために私はそれを気にすることはできない。フィールド数を変更するコードの作成方法

誰かが正しい方向に向けることができれば、読書を自分自身でやることができてうれしく思います。自分でこれを検索する際に使うことができるさまざまなキーワードをすべて使い果たしただけです。あなたの助けを前にありがとう。

+4

これは標準多対多の関係です。それぞれの組み合わせに対して '(IssueID、AuthorID)'複合キーと、イラストレーターでも同様のマッピングキーが必要です。 – shmosel

答えて

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

これを複数のテーブルに分割できます。

-- 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) 
関連する問題