# デスペ H30 午後1
# 03/18
# H30 午後1-1
# 概念データモデルと関係スキーマの分類について
- トランザクションとマスタで分類できる
- さらにマスタにおいて,「人・組織系」や「商品系」といった分類もできる
- 大きいデータモデルは, 線で区切ってナンバリングしてから考えると楽
# リレーションの矢印について
- のとき, 多
- 矢印の先が多
- 記載がない場合は1:多
# サブタイプとスーパータイプ
- 汎化した側のエンティティをスーパータイプという
- 特化した側のエンティティをサブタイプという
- 例えば, 料理というスーパータイプに対して, 和食セットや洋食セット, デザートコースといったサブタイプが存在する
# 排他的サブタイプと共存的サブタイプ
サブタイプが共通部分を持つときには共存的サブタイプに分類され, 共通部分を持たないとき排他的サブタイプに分類される
例えば, セット類とサービス対象類というスーパータイプが存在したとき, 和食セットがサービス対象ならばこれはキュゾン的サブタイプに分類される
要するに, 複数のスーパータイプに属することができる場合, 共存的サブタイプに分類されるわけだ
「〜で分類」や「どちらか一方にしか存在できない」, 「両方に属するものは損じ足ない」という文言がある場合は, 排他的サブタイプに分類される
# 記述から読み取れるエンティティと属性
- 「〜で分類」 サブタイプの切り口
- AをBで分類
- AにはBが必要
- エンティティAの属性としてBが挙げられる
- AをBで分類
- 「〜で分類」(サブタイプ無しver.) ただの属性として持たせる
- AをBで分類
- エンティティAの属性としてBを持たせる
- AをBで分類
- 「〜で登録する」 属性として持たせる
- AにはBを登録する
- エンティティAの属性としてBを持たせる
- AにはBを登録する
# キー
# スーパーキー(Super Key)
- タプルを一意に識別できるキーのこと
- 候補キーに, 様々な組み合わせで他の属性を付け足したもの
- 冪集合のようなもの
# 候補キー(Candidate Key)
- 次の2つの制約を持つ
- タプルを一意に識別できること
- スーパーキーの中で極小(それ以上分解できないもの)
- 極小とは, 余計な属性を含まないもの
- それ以上属性を減らすとタプルの識別ができなくなってしまうもの
# 主キー(Primary Key)
- 次の2つの制約をもつ
- 一意性制約
- 非ナル(NULLが認められない)
- 候補キーの中から元もふさわしいものが選ばれる
# 代理キー(Alternate Key)
- 候補キーの中で主キーに選ばれなかったキー
# 小まとめ
- 主キー 候補キー スーパーキー
# サロゲートキー(Surrogate Key)
- 連番がよく使用される
- 一意性を確保して主キーとして使用されるためだけに使用される
- 次のような場合に使用される
- 主キーが複合キーの場合
- 主キーが複数の属性で構成されていると扱いづらい
- そのため, 主キーの代わりにサロゲートキーが用いられることがある
- データウェアハウスで, 長期間の履歴を管理したい場合
- 主キーはstringになることがあるが, integerで管理した方が楽
- 数字列なので一意性が損なわれづらい
- 主キーが複合キーの場合
# 外部キー
- 他のリレーションの主キー(または候補キーでも良い)を参照する項目のこと
- エンティティA,Bについて, A-Bという1:1のリレーションがあるとする
- このとき, Aの主キーpを参照するBの外部キーqが存在するとする
- Aの主キーpには実線で下線が引かれる
- Bの外部キーqには破線で下線が引かれる
# 03/19
# H30 午後1-2
# SQL
- CURRENT_DATE値関数によって現在日時を示すDATE型の値が取得できる
- DISTINCT句で重複を解消できる
- GROUP BY句の後に来れるのはHAVING句かORDER BY句
- グループ化した後に条件があればHAVING句
- グループ化した後にソートされていればORDER BY句
- ASCは昇順, DESCは降順
- ASCは省略可能
# 参照制約
- テーブルとテーブルが参照関係にある場合の整合性制約
- 参照元テーブルに外部キーを指定することで, テーブル間の整合性を保つ
OPTION | 詳細 |
---|---|
NO ACTION | 参照元テーブルにデータが存在している場合, 参照先テーブルでは削除と更新ができない |
'' | オプションを設定しない場合, NO ACTIONに設定される |
CASCADE | 参照元テーブルにデータが存在している場合でも, 参照先テーブルで削除と更新ができる |
'' | データは連携して削除される |
SET NULL | 参照元テーブルにデータが存在している場合でも, 参照先テーブルで削除と更新ができる |
'' | 参照元テーブルのデータはNULLに設定される |
- 参照先テーブルに関して(raw data)
- 行を追加することは問題ない
- 行を削除する場合に, 参照元テーブルの外部キーに同じ値が存在している場合, 削除はできない
- 参照関係が存在している場合に削除はできない
- ある行を更新する場合, 参照先テーブルの外部キーに存在する値への更新なら可能になる
- 参照元テーブルに関して(instance data)
- 行を削除することは問題ない
- 行を追加する場合に, 参照先テーブルに存在するものかNULLしか追加できない
- 行を更新する場合に, 更新後の値が参照先テーブルに存在する値にしか更新できない
# H30 午後1-3
# Notes
- 「〜で識別する」や「〜で分類する」といった記述がある場合, 一意性を持つことが多い
- ただし, 「1つ以上の〜」という記述がある場合, 一意性が失われることもあるため注意する
- SQLのBETWEEN句は閉区間である
- BETWEEN A AND B
- [A, B]
- 大規模な処理は細分化するとよい
- 先行/並列/後続処理の3ステップに分けて考えると分類が楽
# ユニーク索引と非ユニーク索引
- ユニーク索引は, 表内のデータの2つの行が同じキー値を持たないようにすることにより, データ整合性の維持に貢献する索引のこと(By IBM)
- ユニークサック員は, 値の重複を許可しない索引
- 非ユニーク索引は, 値の重複を許可する索引
# 表探索と索引探索
# 表探索
- 索引を使用せずに全データページを探索する
- 逐次探索
- O(N)
# 索引探索
- 検索条件に適した索引によって対象行を絞り込んだうえで, データページを探索する
- O(1)くらいか?