DB設計入門_ 1
Categories:
database
- テーブルは表のように表示されるが、“表”ではない。 関係(リレーショナル)したモデルであり、それに一番適した形として表で表現されている
- 主キー そのテーブルの中でユニークになる値を持つ列。 複数の列を組み合わせて主キーとする”複合主キー”もあります。(主キーが複数あるわけではありません)
- 外部キー(FKとか記入されていることこも=foreign key) 外部キーで引くことができる値。 それによって外部キーのテーブル(親)で持っていない値を入力できなくする(制約をかける)
- 正規化
テーブルの関係性について
- カージナリティ 関係性の数のことです。
- 多対多? どういうパターンでしょう? たとえば「学生」と「授業」を関連づけることきに 学生は複数の授業をとることができ、 授業は複数の学生に教えるものです
しかしこの関係のまま設計するのは好ましくありません。 両者が共通するキーを持っていないからです。 学生コードは主キーですが、複数の授業を受けている場合、授業テーブルに複数の同一学生コードがあることになります。 逆もしかり。
そんなときは
関連実態で間にワンクッション挟みます これを関連実態といいます。 だから関連実態は本当に実態というよりも「表」って感じになるね。紐付け表。
こっから先には物理層(DB内部)
パフォーマンスについて 正規化の副作用
- SQLの中でもJOINは高コストです。多用するとSQLの速度が悪化します。
- SQLの実行方法はDBMSが自動的にきめます。クライアントが指定するのはなにを取って欲しいだけでです。 手続きの方法までは指定しません(非手続き型言語)
パフォーマンスで重要な要素が - インデックス と - 統計情報 です!
インデックス
- B-treeインデックスが平均点高い優等生だよ! https://en.wikipedia.org/wiki/B-tree
統計情報
これをもとにオプティマイザが最適な手続きを作り、実際にDBとやりとりします。
リレーショナルデータベースの弱点
苦手なデータ構造がある->ノード型のやつ。 NoSqlなどはこれに強い。(制約とのトレードオフ)