MSDE FunClub
Microsoft Data Engine FunClub
MSDE初心者向けメーリングリスト過去ログ[55]番
 
[TOP]>[MSDE初心者向けメーリングリスト過去ログ(55番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
Re: 正規化のこと

Date: Fri, 8 Feb 2002 14:17:14 +0900
From: "Akira Horikawa" <who@example.ne.jp>


堀川です、こんにちは

-----Original Message-----
From: Tadashi Nakamura [mailto:who@example.com] 
Sent: Friday, February 08, 2002 12:46 PM
To: who@example.ne.jp
Subject: [ml-msde-beg:00054] Re: 正規化のこと


>ざっと読んでみたのですが、
>正規化とは要するに、デ−タの「冗長度」を低くする、というように
>理解してよいでしょうか。

データベースの設計に慣れていない段階では、『正規化』を意識
するよりは、『データの整合性の維持』や『メンテナンスのしやすさ』
を実現するためには、どのようなテーブル設計の工夫が必要なのか
を考えると良いでしょう。

そうすれば、おのずとテーブルは正規化されます。

例えば
             会社 {会社番号,会社名,住所}
             個人 {個人番号,会社番号,会社名,住所,個人名}
『会社』と『個人』の2個のテーブルがあったときに、個人のデータを
見るときは常に会社のデータも一緒に見たいという要求があるとします。
個人テーブルの中に会社情報を抱えてしまうという考えがあります。

この場合、個人のレコードを取り出せば、会社情報もわかるので
すばやくデータの閲覧ができるメリットがあります。
が、しかし、会社情報の変更があるときは、会社テーブルを修正し、
個人テーブルも修正しと大変な作業になります。

また1つの会社に複数人の個人が存在するときは、そのレコード分
だけ、会社情報の修正が必要です。

『データの整合性の維持』という観点から考えれば、データの
修整行為はできる限り最小にするのが良いわけです。
修正をし忘れると、整合性の維持ができません。

       データの閲覧が早いという利点を選ぶのか?
       データ整合性の維持が簡単になる方を選ぶのか?

これは開発しているアプリケーションの内容などにより決める
べきことになります。

まあ一般的には、個人テーブルの中には、会社番号だけを入れて
会社名などの情報は入れないようにする、参照整合性関係を
取り入れます(テーブルの正規化)。
これは、データの修正行為が簡単になる利点があります。




          主キー  コード1  コード2  コード3  値
というテーブル(5列構成)があり、それに応じたアプリケーション
を作ったとします。

 将来、もし、このテーブルに『コード4』という新しい列を追加
する可能性があるとしたら、その時点でアプリケーションの大幅
な変更が必要です。
 テーブルに列を追加するという行為は、大変な修正作業になります。

また、『コード1』と『コード2』と『コード3』に共通した値が入力される
としたら検索条件の作成では、
            コード1=値A  OR  コード2=値A  OR  コード3= 値A
のようなOR条件を書くことになり、大変です。
将来、新しいコード列4が追加されたら、この検索条件も直さないと
いけません。

それだったら、

   最初のテーブルの主キーだった列  ,  列番号(1,2,3,4など) ,  コード

というテーブルを用意して、コード1,コード2,コード3に相当するもの
を番号1,2,3で表現します。
こうすれば、将来コードNという列が増えても容易に対応ができますね。

そして、値は、
                    最初のテーブルの主キーだった列  ,  値
で管理します。


このようにテーブルを設計すれば、

>「主キー、コード1、コード2、コード3、、、コードn、値」という
>Fields 構成の一つの Table の計n+1個の Table

コード番号が増えても容易に対応ができるし、検索条件の与え方も
簡単になります。

リレーショナルデータベースでは、後から列を増やすことは
避けるようにしてください。
レコード(行)は、いくらでも登録しても構いません。
可変個になりそうな列は、行の追加で逃げるようにしましょう。

このような工夫を日頃から心がけて下さい。

------------------------------------
(株)日本技術ソフト開発
        堀川 明  (Akira Horikawa)
    02月08日(金曜日) 14時14分記
        mailto:who@example.ne.jp
        http://www.horikawa.ne.jp/msde/



[MSDE/SQLServerに関して、今、どんなことにお困りですか?]
よろしければお困りの内容を、電子メールで教えて下さい。
質問を電子メールで作成する


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

[MSDE / MSDE2000 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。