# デスペ H30 午後2
# 03/20
# H30 午後2-1
# NOT NULL制約の表記
- 次のような表現を用いる場合, NOT NULL制約が必要
- 指定は必須
- 自動的に設定される
- 〜のいずれか
- 「〜を指定しなければならない」が省略されていると考えれば良い
- 次のような表現を用いる場合, NOT NULL制約が不必要
- 任意
- 登録後, 別のタイミングで記録する
- 登録時はNULLの可能性が高い
- 次で触れるCRUDのUが指定されているとき
# CRUD表
- C(Create), R(Reference), U(Update), D(Delete)のこと
# 格納長の計算
- NOT NULL制約がある場合, NULLフラグが追加されることが多い
- 大抵はRDBMSの仕様で定義されている
- NULLフラグはNOT NULL制約のある列にのみ追加される
# テーブル定義表の索引
- 次の3種類がある
- P(Primary Key)
- NU(Not Unique)
- U(Unique)
# ストアドプロシージャ(Stored Procedure)
- DB上での一連処理に名前をつけて関数のように呼び出して使用できるもの
- DB上で動作を完結させるため, 開発言語に依存しない
# 03/21
# H30 午後2-2
# 排他的サブタイプと共存的サブタイプ
- どちらか一方にのみ所属できるのは排他的サブタイプ
- 両方に属することができるのは共存的サブタイプ
- 「AとBを兼ねることもある」というとき, 共存的サブタイプである
# 1対多
- つぎの例で考える
部署
社員
部署 (部署コード(主キー), 部署名, ...)
社員 (社員番号(主キー) , 社員名, 部署コード(外部キー), ...)
- この関係スキーマから, つぎのことが分かる
- 各社員は, どこか1つの部署に所属する
- 各部署には, 複数の職員が所属している
# 見分け方
- AとBというエンティティがあった時で考える
- A:B = 多対1
- エンティティAに対して, エンティティBが1つ所属できる
- 言い換えると, エンティティBにはエンティティAが複数所属できる
- A:B = 1対多
- エンティティBに対して, エンティティAが1つ所属できる
- 言い換えると, エンティティAにはエンティティBが複数所属できる
- A:B = 多対1
- 主キーと外部キーの関係が自明である場合
- 外部キーを含むエンティティが
多
になる - ただし, 「1回に限り〜できる」といった制約がある場合は1:1になることもある
主キー
外部キー
の関係が成立するとき主キー
:外部キー
= 1対多
- 外部キーを含むエンティティが
# 実際の問題
- 「発注品目ごとに, 仕入先が1つ決まっている」
- 発注品目:仕入先 = 多対1
- 「商談は商談#で識別し, 商談相手の契約先, 商談を担当する社員を記録する」
- 商談エンティティの契約先および社員は外部キーである
- 商談:契約先 = 1:多
- 商談:社員 = 1:多
# 1対1
- 「〜ごとに, ...を1つ割り振る」
- 1対1の関係