440 likes | 568 Vues
第5章 データベースの設計. 5.1 データベース設計の概要 5.2 ER モデルとスキーマ設計 5.3 正規化 5.4 一貫性制約. 5.3 正規化 1.正規化の必要性. 設計者によって ER モデルの記述が異なるケースが生じる。 得られた関係スキーマに問題が生じることがある。 ER モデルを用いずに設計した場合、直感的には正しくても問題が生じることがある。. 最も多いのは、重複(冗長性)があることで、データベースの内容更新時に、さまざまな異常が起きるケース。. 例題. 学生 1 人で複数の学科を履修するので、 学生の主キーは、{氏名,科目}. 更新異常の例.
E N D
第5章 データベースの設計 5.1 データベース設計の概要 5.2 ERモデルとスキーマ設計 5.3 正規化 5.4 一貫性制約
5.3 正規化1.正規化の必要性 • 設計者によってERモデルの記述が異なるケースが生じる。 • 得られた関係スキーマに問題が生じることがある。 • ERモデルを用いずに設計した場合、直感的には正しくても問題が生じることがある。 最も多いのは、重複(冗長性)があることで、データベースの内容更新時に、さまざまな異常が起きるケース。
例題 学生1人で複数の学科を履修するので、 学生の主キーは、{氏名,科目}
更新異常の例 (a) 変更異常 (b) 挿入異常 (c) 削除異常
(a) 変更異常 情報を変更する際, 重複するすべての情報を変更しないと, 同一であるべき情報間に矛盾が生じる。 学生が転居し住所を変更する場合, 履修科目分のタプルをすべて変更
(b) 挿入異常 学生が1つも科目を履修していない場合,学生の住所などの情報を含んだタプルを挿入できない。 科目名がキーになっているため,科目名に値がないタプルを挿入できない
(c) 削除異常 ある学生の履修科目が1つしかない場合,学生の情報を含むタプルが1つのとき,その履修科目を削除すると,住所等の情報が失われてしまう。
(d) 更新異常を起こさないために 科目,成績と,住所は本来関係がない。 学生の所属学科や住所の表と履修関係の表を分ける。 更新異常を起きないような関係に変形することを正規化,そのような形を正規形という。 【用語】正規形:normal form, 正規化:normalize
(e) 正規形の種類 第1正規形 第2正規形 第3正規形 BCNF(Boyce-Codd正規形) 第4正規形 第5正規形
(f) 第1正規形 属性の定義域は構造を持たない単純な値であり,値の集合などであってはならない。 【第1正規形の例】 <山本栄一,ソフトウェア工学> 【第1正規形でない例】 <山本栄一,{ソフトウェア工学,人工知能}>
(g) 複合定義域や集合を許す場合 • 複合値を1つの値と考えて,第1正規形を満足させればよい。 • 集合の場合,1つのタプルを複数のタプルに分けることで第1正規形にする。 第1正規形を満たさない関係を非正規関係という。
2.関数従属(a) 関数従属(FD:functional dependency) 関係Rのスキーマが与えられ,その属性集合XとYに対して,Xに属する属性値が同一であれば,Yに対する属性の値もすべて同一であるときYはXに関数従属するという。 (Xの値によりYの値が一意に定まるとき) Xを決定項,Yを従属項といい X→Y と書く。
(b) 完全関数従属 YがXに関数従属し, かつXの真部分集合(Xと同一でない部分集合)には関数従属しないとき, YがXに完全関数従属するという。
(注意)関数従属とキーの関係 候補キーの値が決まれば,タプルの値が決まる。 すべての属性は候補キーに関数従属する? この場合,スキーマの性質として考えるべきである。「ある時点の関係の内容でたまたま成立している」と考えるべき。 関係の内容が更新されても常に成立しているとき「関数従属する」という。
関数従属の例 誕生日と年齢 部品番号と部品名 学籍番号と氏名
(c) 関係の分解と結合 関係スキーマRの部分集合SとTにおいて, SとTの和がRになり, SとTに共通な属性が存在するとき, SとTをRの分解という。 関係Rは,関係SとTの自然結合の部分集合となる(一致ではないことに注意)
(d) 無損失分解(information lossless decomposition) 関係Rを分解したSとTの自然結合が Rに戻るような分解
3.関数従属に基づく正規系 関数従属に用いて定義される属性は、以下の3種類 ①第2正規形 ②第3正規形 ③Boyce- Codd 正規形
(a) 第2正規形 関係が第1正規形で、かつキーでない属性が各候補キーに完全関数従属しているとき第2正規形という。 ①住所は主キー(候補キー)「氏名」には、関数従属している。 ②住所は、候補キーの「科目名」には、関数従属していない。 第2正規形ではない ⇒無損失分解によって第2正規形にする
(a) 第2正規形 関係が第1正規形で、かつキーでない属性が各候補キーに完全関数従属しているとき第2正規形という。 ①住所は主キー(候補キー)「氏名」には、関数従属している。 ②住所は、候補キーの「科目名」には、関数従属していない。 第2正規形ではない
第2正規形にする 無損失分解によって第2正規形にする。
(b) 推移的関数従属(1)例題とする表 発注部品番号が決まると、 部品名、発注業者名、発送地、発送連絡先が決まる。
(2)第2正規形で発生する操作異常 ①削除操作における異常 「北村電装」を表から削除したとき、「北村電装」の発送地、連絡先のデータがなくなってしまう。 ②変更操作における異常 「キャスパック」の発送地が「名古屋」から「静岡」に変わったとき複数の行を変更する必要がある。
なぜか? 間接的な隠れた従属性が隠れている。
(3)推移的関数従属性Transitive Functional Dependency 間接的な隠れた従属性 =従属性がある属性を経由して推移的な従属性がある。 【推移的関数従属性の定義】 関係Rの異なった属性または属性集合をX, Y, Z とするとき、 X→Y かつ not(Y→ X) で Y→Zのとき、 X→Z かつ not(Z→ X) が成り立つとき X→Z を推移的従属性といい、 Z は X に推移的に従属する
(c) 第3正規形 【第3正規形が満たすべき条件】これを満たすよう分解 ①関係Rは第2正規形である。 ②関係Rの候補キーに含まれないすべての属性は、Rのいかなる候補キーにも推移的に従属しない。
(d) Boyce-Codd正規形(1)例題とする表 配属された時点での配属履歴表
(3)第3正規形の操作異常 ①挿入操作における異常 新たに責任者番号「385007」を責任者として、「公共システム営業部」を新設したので、表に挿入しようとしても社員がまだ配属されていないので社員番号をもつ社員は存在しない。また、部下なしの部署名を挿入できない。 ②削除操作における異常。 「総合企画」がたまたま部下1人、上司1人だとすると、社員番号「561012」が退職したのでその行を削除しようとすると責任者番号の情報が表から失われる。
なぜか? 推移的な関数従属性と異なる循環的な従属関係が、主キーと他のキーの間に存在する。
(3)分解 ①関係Rは第1正規形である。 ②関数従属のすべての決定項は候補キーである。 上司表 部署責任者表 または、配属表
(e) 第4正規形(1)結合のわな 年別製造者番号表 A 表を分解し、結合することを考える 部品管理表 P A.製造者番号 =B.製造者番号 分解 部品製造者番号表 B 結合 幽霊組の発生
幽霊組が発生しないようにするには 部品製造年表 A 分解方法を変える 幽霊組は発生しない! 部品管理表 P A.部品番号 =B.部品番号 分解 部品製造者番号表 B 結合
なぜか? 多値従属の関係 ひとつの部品番号128と製造者番号3301または51230が決まると、複数の製造年の値2010と2012が決まる。 年別製造者番号表 A 部品管理表 P A.製造者番号 =B.製造者番号 分解 部品製造者番号表 B 結合 幽霊組の発生
(2)多値従属性の定義 属性Xの実現性が決まると属性Zが決まるとき、 属性Xに属性集合Yを加えて決まる属性が 同じ実現値をもつとき 属性Zは属性Xに多値従属という。 ひとつの部品番号の値に対して多数の値が決まる(多値従属) 部品番号に製造年の値を加えても同じ値が求まる。 128は2つの製造者に発注し、 どの製造年から見ても製造業者は同じである。 互いに独立
(3)自明な多値従属性について 属性Xに多値従属する属性Yが空集合のとき 自明な多値従属という。 (部品番号 = 128のみ) 自明な多値従属 (製造者番号 = 51230 のみ) 幽霊要素が発生 製造年 製造年 :幽霊要素 2012 2012 2011 2011 2010 2010 33001 51230 128 256 製造者番号 製造者番号
(4)第4正規形 ①関係Rは第1正規形である。 ②関係Rには、自明な多値従属しか存在しない。 部品製造年表 A 部品管理表 P 第4正規形 部品製造者番号表 B
(f) 第5正規形(1)結合のわな 部品製造年表 A ひとつの要素が欠如すると幽霊要素が 発生する場合がある。 幽霊組が発生! 部品管理表 P A.部品番号 =B.部品番号 分解 部品製造者番号表 B 結合
(2)結合属性の定義 関係Rを射影(分解)してできた 関係S1, S2,・・・, Snを用い、 自然な結合を行うと、 元の関Rが復元されるとき、 関係S1, S2,・・・, Snは 結合従属にあるという。 結合従属関係にある表を「結合のわな」が生じないよう分解する工夫を行う。
(3)第5正規形 ①関係Rは第1正規形である。 ②結合従属にある他の関係との自然な結合によって、元の関係が復元できる。 部品管理表 P 射影: {部品番号,製造者番号} 射影: {部品番号,製造者年} 射影: {製造者番号,製造年} 分解 分解 製造者製造年表 C 部品製造者番号表 A 部品製造年表 B
結合 部品製造者番号表 A 部品製造年表 B 製造者製造年表 C 元の関係を復元 結合:A [部品番号 = 部品番号] B 結合:A [ 製造者番号 + 製造年 = 製造者番号 + 製造年] C
(g) データ要素そのものについて あるデータ要素から別のデータ要素を導くことができる場合、 ①時系列で変化しないデータ要素 ② 実現値の元の数が多いデータ要素 ③ より本質的なデータ要素 を選択する。 勤務年数と入社年月日→入社年月日 年齢と誕生日→誕生日 成績評価とテスト点数→テスト点数 人口密度と人口,面積→人口,面積
(h) まとめ ①以下の順に条件が強くなる。 第1正規形→第2正規形→第3正規形 →BCNF→第4正規形→第5正規形 ② 一般に強い正規形に変形すると更新以上が発生する可能性が減少するが、検索効率が低下する。 ③ どのレベルまで正規化を適用するかは、更新異常の防止と検索効率のトレードオフである。 第1正規形 第2正規形 第3正規形 BCNF 第4正規形 第5正規形