2章からやっていく。
概念データモデル
1. データモデル
現実世界のデータをDBMSにおける表現をモデル化したもの。
第1回 データベース設計とは:初めてのデータベース設計|gihyo.jp … 技術評論社
ここがわかりやすかった…わけではなく最初にでてそれなりの説明だったので載せたにすぎない。
実際にわかりやすいかはわからない。私がわかってないからね。
概念データモデル
ERDで表されるやつ。
論理データモデル
DBMSの種類を前提に再整理したモデル。
階層モデル、ネットワークモデル、関係モデル、最近ではオブジェクトモデルも存在する。
物理データモデル
ここになって初めてインデックスやテーブル定義表、テーブルやページの容量を決定する。
2. ERD(E-R図)
みんな大好きERD。これ知らない奴は潜りとまでは言わなくても基本情報は受かってないだろうなと推測できるレベル。
用語なんて知らなくても一人開発にはなんの問題もないと思ってる。複数チームでやるには話はべつ。コミュニケーション取れないじゃん。
だから基本取らなくてもERD知らなくても一流のソロエンジニアってのはいてもおかしくないと思う。
まあ私、基本と応用持ってるんですけどね^〜(持っててこれかよ)。
エンティティ
ユーザ
ーーー
id
名前
ハッシュ化済パスワード
メールアドレス
こんな感じだろうか。私は型だと思ってる。
んで、「名前」や「メールアドレス」は属性と呼ばれる。
インスタンス
オブジェクト指向のあれとかなり似てるのでそういうの理解してる人は理解しやすそう。
先ほどエンティティで出たユーザエンティティから生成されたインスタンスはこのように表現される。
1, black-box, 8ab...bc, black-box@example.com
属性集合値と言えるらしい。
主キー
インスタンスを一意に識別するためのキー、もしくはキーの組み。
前の例で行くとidを主キーにすることが多いと思う。私はidを削ってemailでもいいと思うが、
実装によるのだろうか。ここら辺は先輩エンジニアやグルに聞きたいけどそんな人無職で孤独にはいませーん。
叩かれて強くなるのだ。
主キー制約というものがあり、
先ほど出た一意であること、それと非nullであることがあるが、
確かnullでも通ったデータベースがあったような…。
調べたけど気のせいだった。
リレーションシップ
ーー>
1対多
<ーー
多対1
ーーー
1対1(滅多に出ないらしい。実際見たことない。)
<ー>
多対多
1や多をカーディナリティや多重度と呼ぶ。
連関エンティティ
これくらいはRDB使う限りは個人のショッボイアプリでも使う知識だと思ってる。
多対多潰し。繰り返し行を削除するための工夫?
強エンティティ、弱エンティティ
エンティティAのインスタンスが消える時、それと同時に消えるもの。
Aを強、消える方を弱エンティティと呼ぶそうだ。
カスケード設定のあれにも名前ついてたんだ。
MySQLの外部キー制約RESTRICT,CASCADE,SET NULL,NO ACTIONの違いは? - Qiita
私が思い出したのはこれ。
ループ構造
id parent_id
みたいなエンティティがあって、
1,nil
2,1
3,2
4,1
みたいなインスタンスが生成される。
実はこれ、私が今書いてるコードの実装に入れてて、
slack-nippo-bot/db.clj at master · wasuken/slack-nippo-bot · GitHub
ここなんだけど、アプリ側で処理してみたら割とめんどくさくて辛かった。
現時点のコードでも時間のかかる処理を書いてるはずだ。
ミュータブル的な処理していけば楽なのかな?。それかクラスっぽくしてしっかり再帰処理すれば楽なのかもしれない。
とにかくこれに関しては実装のヒントが割と欲しい状態ではある。
まあ、今回は割と特殊なケースで、ツリーを全て組み上げないといけないみたいなのは
あんまりないからこれでいいといえばいいのかもしれないけど。
所感
私は細かいことを覚えるのが苦手なので、学習もこれくらい小刻みでいいのかもしれない。
これで試験間に合うの?
うるせえ!
>> Home