Mail
 ナビゲーション リンクのスキップ

8.第一正規化

★複数のデータ

実は前ページの「整理する情報を決定」のところで、データモデリングを終了しても良いのです。
ただ、1枚のCDに複数の収録曲があった場合、前ページのようなテーブル構成では、1曲しか入力できません。

項目 内容 データ型 データサイズ
名前 CDの名前 可変長文字列型 50文字
レーベル レーベルの名前 可変長文字列型 10文字
作曲家 作曲家の名前 可変長文字列型 30文字
ソリスト ソリストの名前 可変長文字列型 30文字
合唱団 合唱団の名前 可変長文字列型 30文字
オーケストラ オーケストラの名前 可変長文字列型 30文字
値段 CDの値段 通貨型
指揮者 指揮者の名前 可変長文字列型 30文字
収録曲1 収録曲の名前 可変長文字列型 50文字
収録曲2
収録曲3



というふうにも出来ますが、いったい何曲分用意したらよいのでしょう?
それに1曲しか収録されていないCDもたくさんあるのですから、そのときは無駄になってしまいます。
これは、作曲家、ソリスト、合唱団、オーケストラ、指揮者にも言えることです。

★複数のデータを分離する

第一正規化では上記のように1枚のCDに、複数出てくる情報を抜き出します。
抜き出した情報は、それぞれ1つのテーブルとします。
すると以下のようなテーブルが新たにできます。

テーブル名 内容
作曲家テーブル 作曲家の情報を登録する
ソリストテーブル ソリストの情報を登録する
合唱団テーブル 合唱団の情報を登録する
オーケストラテーブル オーケストラの情報を登録する
指揮者テーブル 指揮者の情報を登録する
収録曲テーブル 収録曲の情報を登録する

ここで、「まてよ、作曲家の情報は収録曲と一対一で対応してるじゃないか」と気がついた方は鋭い。
収録曲と作曲家の情報は、CDとレーベルの関係と同じです。
この逆は成り立ちません。
つまり、「収録曲の情報は作曲家と一対一で対応している」とは言えません。
作曲家は、何曲も曲を書く可能性があるからです。
「曲だって合作という可能性があるじゃないか」と気がついた方、やはり鋭い。
そういう何千(万?)曲に1つのようなデータまで、考慮するかどうかは、その人の真面目さ具合によります。
私はそれほど真面目では無いので、そういうデータが万が一出てきた場合は、代表的な作曲家の作品とすることにします。

なぜこのような話をしたかというと、収録曲と作曲家のような関係の情報は、第一正規化の段階では、取りあえず一つのテーブルにしておくのです。
つまり作曲家の情報を、収録曲の情報に加えてしまいます。(実は第二正規化で、結局分けることになるのですが、一緒にしておかないと第二正規化でやることが無くなるので・・・(^-^;))
逆(作曲家テーブルに収録曲を入れること)は駄目ですよ。

★分離後

この様にテーブルを分離すると、例えばソリストテーブルには、名前だけではなく、生年月日の情報を持たせたいなとか、国籍の情報も持たせたいとか、プロフィールも入れたいとか、写真があればその画像も・・・などなど、いろいろとアイデアが湧いてきませんか?
プロとしては、そういう情報も持ちたいのだったら、前の段階で決めておけよと言いたいところですが、個人でやることなんですから、自由で良いと思います。
ただ、後々用途のないようなデータは含めない方が良いです。

分離したテーブルにも、それぞれキーは必要です。
迷ったら、CDテーブルのように番号という項目を加えて、キーにしてください。
そうすると、下記のようなテーブルが出来ます。

☆作曲家テーブル
作曲家番号 作曲家名 国籍 生年月日 没年月日

☆ソリストテーブル
ソリスト番号 ソリスト名 国籍 楽器 生年月日 没年月日

☆合唱団テーブル
合唱団番号 合唱団名 国籍

☆指揮者テーブル
指揮者番号 式社名名 国籍 生年月日 没年月日

☆収録曲テーブル
収録曲番号 曲名 作品番号 作曲家名

ここで、収録曲テーブルに作曲家名という項目が出てきました。
これは、作曲家テーブルにも出てくる情報です。
このような場合、第一正規化の段階では、作曲家を収録曲に含めて、作曲家テーブルを削除してしまいます。

☆収録曲テーブル改
収録曲番号 曲名 作品番号 作曲家名 作曲家国籍 作曲家生年月日 作曲家没年月日

もともとのCDテーブルは、どのようになるでしょうか。

☆CDテーブル
CD番号 名前 値段 レーベル

ずいぶんと寂しくなりました・・・(笑)