私は Access コースで正規化を教えており、それをいくつかの方法で分類しています。
絵コンテやデータベースの計画の前段階について説明した後、正規化について詳しく説明します。私は次のようにルールを説明します。
各フィールドには、意味のある最小値が含まれている必要があります。
ボードに名前欄を書き、ビル・ランバーグのように姓名を入れます。次に、学生にクエリを実行し、名前と姓がすべて 1 つのフィールドにある場合に問題になることを尋ねます。例として私の名前を使用します。ジム・リチャーズです。生徒たちが道を案内してくれない場合は、手を引っ張って連れて行きます。:) 私の名前は一部の人にとっては難しい名前だと言います。なぜなら、私には 2 つのファーストネームと見なす人もいれば、リチャードと呼ぶ人もいるからです。私の姓を検索しようとしている場合、私の姓はフィールドの最後に埋もれているため、通常の人 (ワイルドカードなし) では検索が難しくなります。また、姓でフィールドを簡単にソートするのは難しいだろうと彼らに伝えます。
次に、意味のあるものは、データベースを使用する予定の聴衆に基づいていることを彼らに知らせます. 私たちの仕事では、人々の住所を保存している場合、アパート番号またはスイート番号用の別のフィールドは必要ありませんが、UPS や FEDEX などの配送会社は、必要なときにアパートまたはスイートを簡単に取得するために分離する必要がある場合があります。彼らは移動中で、配達から配達まで走っています。ですから、私たちにとっては意味がありませんが、彼らにとっては間違いなく意味があります。
ブランクの回避:
私は例えを使って、空白を避けるべき理由を彼らに説明します。私は、Access やほとんどのデータベースは、Excel のように空白を格納しないことを伝えます。Excel では、セルに何も入力されていなくてもファイル サイズが大きくなることはありませんが、Access では、実際にフィールドを使用する時点までその領域が確保されます。そのため、空白であってもスペースを使い果たし、検索速度も低下することを説明します。
私が使用するアナロジーは、クローゼットの中の空の靴箱です。クローゼットに靴箱があり、靴を探している場合は、箱を開けて、それぞれの靴を探す必要があります。空の靴箱があると、クローゼットのスペースが無駄になり、特定の靴を探す必要があるときに時間を無駄にします.
データの冗長性の回避:
私は、顧客情報の繰り返し値がたくさんある表を見せてから、重複を避けたいと伝えます。なぜなら、私はソーセージの指を持っており、同じことを何度も入力しなければならない場合、値を間違って入力してしまうからです。このデータの「ファットフィンガーリング」により、クエリが正しいデータを見つけられなくなります。代わりに、データを別のテーブルに分割し、主キー フィールドと外部キー フィールドを使用してリレーションシップを作成します。この方法では、顧客の名前や住所などを複数回入力するのではなく、顧客のフィールドに顧客の ID 番号を使用するだけなので、スペースを節約できます。次に、ドロップダウン リスト/コンボ ボックス/ルックアップ リスト、または後で Microsoft が名前を付けたいと考えているものについて説明します。:) ユーザーとして、あなたは顧客を検索して入力したくないでしょう ' その顧客フィールドには毎回番号が入力されるため、顧客のリストを提供するドロップダウン リストをセットアップします。ここで顧客の名前を選択すると、顧客の ID が入力されます。これは 1 対多の関係になりますが、1 人の顧客が多くの異なる注文を持つことになります。
フィールドのグループの繰り返しを避ける:
多対多の関係について話すときに、これを示します。まず、2 つのテーブルを作成します。1 つは従業員情報を保持し、もう 1 つはプロジェクト情報を保持します。テーブルはこのように配置されています。
(Table1)
tblEmployees
* EmployeeID
First
Last
(Other Fields)….
Project1
Project2
Project3
Etc.
**********************************
(Table2)
tblProjects
* ProjectNum
ProjectName
StartDate
EndDate
…..
これは、従業員と従業員が取り組んでいるすべてのプロジェクトとの関係を確立する良い方法ではないことを彼らに説明します. 第一に、新しい従業員がいる場合、彼らはプロジェクトを持っていないので、それらのフィールドをすべて無駄にします.第二に、従業員が長い間ここにいる場合、彼らは 300 のプロジェクトに取り組んでいる可能性があるため、 300 のプロジェクト フィールドを含める。新規でプロジェクトが 1 つしかない人は、299 の無駄なプロジェクト フィールドを持つことになります。この設計にも欠陥があります。なぜなら、特定のプロジェクトに携わったすべての人を見つけるために、各プロジェクト フィールドを検索する必要があるからです。そのプロジェクト番号は、どのプロジェクト フィールドにも含まれる可能性があるからです。
かなりの量の基本的な概念について説明しました。他に質問がある場合、または明確化/平易な英語での分解の助けが必要な場合はお知らせください. wiki ページは平易な英語として読めず、一部の人にとっては気が遠くなるかもしれません.