【Coursera】University of Colorado ; Database Management Essentials (1)
【Coursera】University of Colorado ; Database Management Essentials (4)Coursera Database Management Essentialsの受講メモ。
・DBMSって?
・どんなDBMSがあるか?
スプレッドシートは特に定義や設計は決めずに作成することができるが、DBMSの場合、DBMSを作成する前に最初にデータ構造について設計を行う必要がある。
・non procedural languageとは?
非手続き型言語。扱う問題やデータの構造や性質を記述していくなどの手法でプログラムを記述する。高級言語で、SQLも含まれる。
・non procedural accessの重要性
開発が楽になる。
・データウェアハウスとは?
論理的に統合されたデータリポジトリで、データベースや他のソースからのデータが、BIとして利用するために標準化・統合化されている。
・Transaction Processing(トランザクション処理)
・DBMSの変遷
1960’s - 1st generation - File oriented
シーケンシャルアクセスとランダムアクセスのサポート。この時ユーザーはDBにアクセスするためにコードを詳細に書く必要があった。標準はない。
1970’s - 2nd generation - Navigational
複数の要素型と関係DBの管理をサポート。このときもまだユーザーはDBにアクセスするためにコードを詳細に書く必要があった。
1980’s - 3rd generation - Relational with non-procedural access
非手続き型のSQLクエリのサポート。
1990’s - 4th generation - Object oriented NoSQL
DA (データ管理者):業務の実世界から概念設計を行い、システム化の範囲で論理的な設計を行う。
DBA (データベース管理者):実際に論理設計から物理設計(より実システムに近い形の設計)を行い、データベースの構築、運用設計、運用保守を行う。
データベースの列名(Column名)は一般的に、テーブルの略語+列を表す言葉とする。
そのようにすることで、表結合時にわかりやすい。
【レッスンの目標】
関係データモデルを引き続き学習。
本章ではDBSの理解に必要な詳細なコンポーネントについて理解を深める。具体的には以下の要素について。
・1:多の関係を理解し、プライマリキーと外部キー(FOREIGN KEY)の関係について
・単独の外部キー(? : orphaned foreign key)と存在しない外部キー(?: missing foreign key)に関連する行のエラーについて
・外部キーが必要な状況について
DBMSには様々な制約(integrity rule)が存在する。
Entity Integrity(実体完全性):ある表について、(プライマリキーについて)どの行も重複することはなく、主キーを構成するどの列もnullをゆるさないこと。
実態完全性は、RDBの一貫性(データ完全性)を保証するために必要な特性。
※データ完全性(data integrity):データが全て揃っていて不整合や欠損が無いことを保証すること。
DB内部データ完全性を保証するために、一意性制約やCHECK制約、あるいはエンティティ間に参照整合性を保つの制約がある。
一意性制約:
そのまま。一意の制約。
1. 列制約:ある一列におけるデータは全てユニークでなくてはいけない。
2. テーブル制約:テーブル
3. 複数列(列グループ)への制約:
CHECK制約:
追加・更新するデータが有効となる定義のこと。1つの列に対して1つ以上の定義を設定できる。
例えば、給与を示すpay列に対して値が3,000,000以上8,000,000以下となるような制約や、YESとNOのみ許容する制約が相当する。
参照整合性(Referential Integrity):
外部キーを利用する場合、外部キーのデータは参照元の値と同値である必要があり、参照元にない値を許してはいけない。
integrity constraints(一貫性制約):
1. 単独の値としての制約:もし年齢であれば120歳より大きな年齢のデータは入るべきでない(CHECK制約が相当)
2. 他の関係の属性との関係による制約:外部キー制約。”部門テーブル(部門名,部門id)”の作成後、”従業員テーブル(部門id,従業員名)”を作る時、部門idは部門テーブル”の部門idを参照する。
もし“従業員テーブル”から”部門id”を更新すると、部門テーブルの”部門id”も更新されてしまうので、それを禁止する必要がある。それが外部キー制約。
3. 表の全値にある関数を適用して得られる値に対する制約:表の全ての値にある関数を適用して、得られる値についての制約。(例えば平均点。100点満点の場合100点より大きい値は入るべきでは無い)
以下の場合Pがprimary key(主キー)でFがForeign key(外部キー)となる。
また、矢印のつながりは子テーブル—>親テーブルの繋がりを表している。例えば OFFERING(子テーブル) ------> COURSE(親テーブル)となる。1:多数のOFFERINGテーブル(1:Many)の関係とも言える。
実線は、子テーブルOFFERINGの”COURSENO”列は、必ず親テーブルCOURSEの”COURSENO”列の値を含んでおり、何かの値がかけていたり、nullとするこはできない関係にあることを示す。
点線は、小テーブルの参照列は親テーブルの参照先列の全ての要素を満たしている必要はなく、nullを許容する。
(本講義では通常のER図とは実線と点線の用途が異なる。。?)
下図は講義の中で使われる資料の簡易版。完全な資料は講義を受講して入手してください。
講義中のQに対するAns.
Q.別々の2つのユーザーが、同一のカスタマー番号から支払いを行なったらどうなるか?その時、違反しているintegrity ruleは何か?
Ans. 一方のカスタマー番号の支払いが2重となり、一方のカスタマー番号の支払いが完了していないことになる。この状態は、実体完全性(Entity Integrity)とデータ完全性(data integrity)に違反する。
データ完全性の中でも、データ完全性を担保するために必要な一意性制約に違反している。
Q. 誤ったオーダー番号に紐づいた発送を行なったらどうなるか?違反しているintegrity ruleは何か?
Ans. 誤った商品が発送先に送付される。この状態は、データベースのデータ完全性(data integrity)に違反している。
具体的には、データ完全性を担保する3つの性質の中の参照整合性(Referencial integrity)に違反している。