xhackのデータベース勉強会。「超・初心者」とついていたので参加してみたものの、なんか実務経験1年だか2年だかの現役エンジニアさんがいらっしゃったりして、勉強会の後半の方は、初心者レベルだった気はしません。個人の主観的には、置いてけぼりになっちゃったなとの思いもありましたが、まあ精進あるのみ。
他の参加者も、初心者の中でも既に半年くらい学習なさっている方だったりして、場の中では自分が一番、学習歴が浅かったかもしれないです(この時点で、ようやく2ヶ月弱の学習歴)。「初心者」といえども、「(ちゃんと勉強している)初心者」ってことですよね、はい、すみませんでした。
ちなみに「超・初心者」と銘打っている勉強会に、わざわざお金払って来られる実務経験者さんってどういう意図なんだろう…?と少し不思議に思いつつ、8人でのワークショップが始まりました。
CONTENTS
ウェブアプリ開発者のためのデータベース超初心者勉強会
会場は目黒のいつもの場所。Impact HUB TOKYOの奥にある会議室スペース。参加費用は女性2500円、男性3000円でした。エンジニアの勉強会においては、女性の参加者が基本的にどんな回でも少ないので、たくさん来て欲しいとのことで若干安くしている模様。今回は参加者8人中、女性は私を含めて2人でした。
ノートパソコンは自分のものを持参。コンセントとWi-Fiが使えます。RubyやGitの勉強会だと、Macユーザーに限定されていることもありますが、今回はWindowsでもなんでも問題ありませんでした。
データベースが必要だった理由/なぜエクセルではダメなのか
- セキュリティ面:誰が見れるか、一覧で見られるので、いったん侵入されると全部見られてしまう。管理権限、編集権限を選べない。
- データサイズ:膨大な量になると、重くなる。
- 整合性:新しい値に更新するときに色々困る。
データベースは情報を入れておく倉庫みたいなもの。
データベースにアクセスしてCREATE・READ・UPDATE・DELETEなどの処理を行うのがDBMS(データベースマネジメントシステム)。
リレーショナルデータベース
- 階層型DB→早いけど、重複データのおそれ。構造変更ごとにプログラムを修正しないといけないのがしんどい。
- ネットワーク型DB→構造変更ごとにプログラムを修正しないといけないのがしんどい。
そこで生まれたのが、リレーショナルDB。
データ構造の修正が入っても、プログラムの修正までいらない
データの取り出しが簡単
といったメリットがある。
データの正規化
- プライマリーキー(主キー):主キーはどれにするのか自分で決められる。だけど、だいたいはIDにされることが大半。被るものがないから(ex. 学籍番号)。※ ①値がNULLでない、②重複しない、③値の変更がほぼないことが必要。
- 外部キー:テーブルとテーブルに関係があることを示すキー。これがないと上手くデータ検索できない。
デメリットは人間的に分かりずらいこと。アドレスに入っている数字を見てもわからない。また、データの正規化においてデータの型を意識するのは、データの取り出しスピードにかかわるから。
トランザクションのACID特性
ついでに復習。DBでは一連の処理をひとまとめにしてトランザクションと呼ぶ。例に良く出されるのは銀行の振込。振り込み元の口座から金額を引くことと、振込先の口座に金額を足すことはひとまとまりの処理として扱われる。自分の口座から金額が引かれているのに、相手の口座にきちんと振り込まれていなかったら困る。こういったトランザクション処理において、DBMSではACIDという特性がある。
- Atomicity(原子性)ぜんぶ実行されるか、ひとつも実行されないかのどちらか。
- Consistency(一貫性)どこのデータも矛盾しない。
- Isolation(隔離性)データが処理中は他の人がいじらないようにロック(排他制御)。処理をお互いに影響させない。
- Durability(耐久性)障害が発生しても復旧できる(ログファイル)。
データベース設計のグループワーク
ひと通りデータベースの基礎を勉強した後は、グループワークに入ります。
ダニエル(Tシャツ店の店長)から聞き出したオンラインTシャツショップの要件
- 売り物はTシャツ、種類は10種類程度
- Tシャツにはサイズと色のバリエーションがある
- ユーザーはemailとpasswordでログインできる
- ユーザーはカートに商品を追加できる
- ユーザーは商品のサイズ、価格、色で検索ができる
- 管理者は管理画面から商品の登録、更新、削除ができる
- シーズンの変わり目でセールを予定している
- 決済手段は銀行振込のみ
- 注文を受けたら出荷をするので、注文確定済みの商品一覧を出力したい
—— 当日の勉強会スライドより引用
こんなお題が出されて、チームに分かれてTシャツオンラインショップのデータベース設計を実際にやってみました。なんか何をどうやって考えれば良いのかすら全然意味わからなかったのですが、隣のグループにはデータベース経験者さんがいらっしゃったので、彼らがやっていることを横目でしっかりとカンニングをし、考え方を学習。
Amazonのサイトだったらこういう項目あるよね~、みたいに洗い出してみました。どの項目を分離して、別途扱うようにした方が管理・運用が楽になるか、といった部分まで設計するのがプロのお仕事(だと隣のグループの人が言ってた)ですが、そこまでしっかり考えることは今の知能レベルでは無理です。ただ、実務でデータベースがどんな使われ方をしているのかの感覚を知らないまま、Progateや市販のテキストでいくら学んでも理解には限界があると思うので、今後の学習にリアリティを持たせる意味では、為になったと思います。
とりあえず、初心者向けの勉強会に経験者やつよつよさんがいるとやりづらいかもしれない(笑)とか思いつつ、いいえ、私の勉強量が追い付いていないのが一番の問題でしょうと我が身を振り返るのでした。実務に出てエンジニアになれたら、私もC言語初心者講座とかやってみたい(言語がキラキラしてないから人気ないかなw)。