FC2ブログ

リレーショナルテーブルの検討

 家族フィールドですが、家族の構成員が複数いた場合はどう表現するでしょう。仮に同じ生徒名簿テーブル上に家族1、家族2、家族3と定義していった場合、人数がわかっていないのでフィールドをいくつまで用意しておいていいかわかりません。例えば10人位で用意しておいた場合にそれより超えた場合に対応できないし、それより人数が少ない場合余った領域は無駄になります。

 このように1:Nの関係にある情報を関連づけるのにリレーショナルテーブルというものを考えます。もちろん結果的に1:1に終わったとしても問題ありません。場合によっては1:0であってもシステム上は問題ありません。もっともこの場合家族の全くいない生徒というのは考えづらいですが。

 家族テーブルとしてテーブルを分けた場合、次に考えなければならないのは生徒名簿テーブルと家族テーブルを結びつけるにはどうするかという事です。この場合、家族テーブルに生徒番号を持たせます。この生徒名簿テーブルと家族テーブルを関連づける生徒番号の事を連結キー又はリレーショナルキーと言ったりします。

 実は家族テーブルで必要になってくるものがあるのですが、おわかりでしょうか。そうです。主キーです。家族一人一人をユニークにするための番号です。ここではそれを家族番号と名付けましょう。


 以下に修正した生徒名簿のマインドマップを示します。
生徒名簿テーブル 家族テーブル
 ここでキーについてまとめておきます。

 主キー:そのデータをユニークにする値を持つフィールド。生徒名簿テーブルでは生徒番号、家族テーブルでは家族番号になります。実際には主キーを設定していなくとも問題のないケースもありますが、パフォーマンス、他データベースの互換等、後々考えると主キーのないテーブルは問題を孕んでくるケースがありますので、主キーはどの場合も設定した方が望ましいと思います。

 連結キー:リレーショナルテーブル同士の関連づけをする為のフィールド。片方のテーブルにとっては主キーが連結キーになります。この場合生徒番号ですが、これは生徒名簿テーブルの主キーにもなっています。つまり、生徒番号一つに対し、同一生徒番号をもつ家族番号は複数あり得ると言うことです。

 副キー(インデックス):これは必ずしも必須ではないですが、目的は検索速度を上げるために設定します。主キーをインデックスにする場合ももちろんあります。例えばTELで検索する頻度が多いと仮定するならこれをインデックスにします。データ件数が多くなればなるほどインデックスの効果は絶大となります。ただデメリットとしてはあまりインデックスを張りすぎると更新速度が遅くなります。インデックスについては設計時ではなく、運用後に追加・削除が自由に出来るので、検索の傾向がはっきりしてから設定してもOKです。ここではまだ副キーは付けないでおきましょう。

 さて次回ではコード化、マスタ化について考えてみることにします。

関連記事
スポンサーサイト



テーマ : データベース
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
全記事表示リンク

全ての記事を表示する

月別アーカイブ
カテゴリ
お問い合わせ
まずはこちらのフォームより御一報下さい。

名前:
メール:
件名:
本文:

検索フォーム
RSSリンクの表示
アクセスランキング
[ジャンルランキング]
コンピュータ
677位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
96位
アクセスランキングを見る>>
ブログランキング

FC2Blog Ranking