4.テーブルの正規化(1/2)
キーワード: 正規化 主キー 外部参照
Wikipedia リレーションの正規化 から:
第1正規形~第3正規形の定義は、
関係 (リレーション) がスカラ値のみを持ちうるとき、そのリレーションを第1正規形 (first normal form; 1NF) であるという。
あるリレーションが、第1正規形で、かつ、すべての非キー属性が、すべての候補キーに対して完全従属するとき、第2正規形 (second normal form; 2NF) であるという。
あるリレーションが、第2正規形で、かつ、非キー属性があるならば、それら全てが候補キーに非推移的に関数従属するとき、第3正規形 (third normal form; 3NF) であるという。
テーブルの正規化については、第1~第5正規形およびボイス・コッド正規形があるが、今回の講義では第1~第3正規形についてあつかう。
■Webclassコンテンツ の以下の資料を元に解説する。
>> ITパスポート試験学習教材
>>テクノロジ系対策コース
>>第9章 データベース
9.2 データベース設計(1) 9.3 データベース設計(2)
>>新基本情報技術者試験学習教材
>>テクノロジ系対策コース2
>>第3章 データベース
3.5 データベース設計(1) ~ データベース設計(5)
■@ITのデータベース正規化の解説記事が分り易くて詳しいので紹介
http://www.atmarkit.co.jp/ait/articles/0605/11/news124.html
演習課題1 XAMPP演習補足:
※動画の最後の部分で、デザイナビューのコネクタを利用して外部キー制約の設定ができなかったと話しているが、設定可能である。
※ 条件1 外部キーの参照元フィールドが 主キー に設定されていること。
条件2 外部キーと参照元キーのデータ型が一致すること。
XAMPPでテーブル間のリレーションを設定する。
先週作成したテーブルのフィールドに 外部キー制約 を設定する。
・テーブルの構造 から relation view を開く。 → 外部キー制約を設定
・データベースのデザイナで確認
・外部キー制約を設定したテーブルにデータ追加・削除・修正
作業例)
※トラブル対応 外部キー制約でエラーになる → テーブルに登録済みのデータで、制約を満たさないものがるので修正する。(テーブルを表示して編集リンクから)
提出方法: phpMyAdmin の デザイナー 機能を利用して、テーブルのリレーションを確認する。 → スクリーンショットを第4回課題としてWebClassに提出する。
※トラブル対応 デザイナに外部キー制約のリンクが表示されていない → 表示切替ボタンを押す
第2回水曜日4時間目の補足
PHP のコードと SQLについて
基本情報処理技術者試験の過去問 を使ってデータベースの勉強
検索キーワード 例) 基本情報技術者試験 午前 過去問 正規化 → 平成20年度秋期 午前 問57 ・ 平成21年度春期 午前 問32 ・ 平成22年度秋期 午前 問29 など
(2016追記)
春のFE試験からデータベース関連の問題抜粋 参照元 基本情報技術者試験ドットコム http://www.fe-siken.com/kakomon/28_haru/
■午前問題 データベース関連
問26 関係モデルと関係データベースの対応 データベース方式
問27 関係Zを得る関係代数演算はどれか データ操作
問28 ACID特性 トランザクション処理
問29 外部キ一定義 データベース設計
問30 排他制御 トランザクション処理
問37 SQLインジェクション攻撃の説明 情報セキュリティ
■午後問題
問3 データベース 遊園地の入園情報を管理する 関係データベース
(2015追記)
春のFE試験からデータベース関連の問題抜粋 参照元 基本情報技術者試験ドットコム http://www.fe-siken.com/kakomon/27_haru/
■午後問題
問26 3層スキーマアーキテクチャ データベース方式
問27 ストアドプロシージャの利点 システムの構成
問28 移動表のa,bの適切な組合せはどれか データ操作
問29 データ項目の命名規約 データベース設計
問30 クエリを実行するまでの処理の流れ データベース方式
問47 E-R 図の説明はどれか ソフトウェア要件定義
■午後問題
問3 データベース 自治会員の情報を管理する関係データベースの設計及び運用
設問1は、これまでの学習内容で回答できる。解いてみること。
この問題の表は、第1正規形に直した時点で、既に第2正規形の条件を満たしています。
よって、答えは 第1正規形 と 第3正規形 を語群から選ぶことになります。
※会員表の主キーは、会員番号の1つだけ。複合キーではないので、主キーに非候補キーが部分従属することは起き得ない。つまり非候補キーはすべて主キーに完全従属するので第2正規化も完了している。
・設問2以降は、SQLに関するものなので、数回後の講義で解説予定。
演習課題2:
導出項目: レコードの記載内容から導かれる項目 例1)生年月日 → 星座 や 十二支 例2)定価x個数 →小計 →合計
導出項目は、テーブルの設計上は記録不要。ただし処理の効率化のため、あらかじめ導出内容を記録する場合もある。
注文番号
注文主
届け先
合計金額
の様な注文記録用テーブルを第3正規形にまで修正した結果のテーブル全て(4個を想定)を示せ。
テーブルの記述は、フィールド名を()でまとめ、主キーのフィールド名の先頭に ○ を付けること。
ヒント:
(○注文主、届け先) ※注文主は複数の届け先を登録できないものとする。さらにある届け先に複数の注文主がいてもよい(例 :兄が注文主、妹が注文主)
と
(○?、○?、 ?)
と
(○?、?、 ?)
と
(○?、 ?)
の4テーブルが必要
回答方法: Webclass の 第4回課題
演習課題3:
↑に掲載した、FE2015 の午後問題、 問3 データベース で扱っているテーブルを、XAMPPで作成し、
レコードを問題文を参考にして追加する。
データベースを新規に作成する。テータベース名は適当に決める。
この課題作成においては、テーブル名やフィールド名は 日本語文字 を利用してもOK
今後の課題、とくにWebシステムやCakePHPなどフレームワークを使用する課題においては 名前 は 英単語で日本語入力OFF を使用すること。
テーブルの設定 と レコードが分る様に工夫して、スクリーンショットを撮影しWebClassにアップロードする。
回答方法: Webclass の 第4回課題