できる!「データベース設計」on Rails Girls Tokyo More

2013年8月10日に開催されたRails Girls Tokyo Moreにて、udzuraさんによる『できる!「データベース設計」』の発表内容です。 スライドはこちらを参照してください。 https://speakerdeck.com/udzura/nareru-detabesushe-ji-zhe
3
みよひで画伯 @miyohide

#railsgirlstokyo@udzura さんによる『できる!「データベース設計」』のお話が始まります。

2013-08-10 14:05:49
みよひで画伯 @miyohide

udzura「ワークショップ形式で、例としてお買物サイトを考えてみましょう。どんなモノが存在するか?」 #railsgirlstokyo

2013-08-10 14:07:28
みよひで画伯 @miyohide

udzura「お客様、商品、注文内容、価格、カテゴリ、店(販売者)、注文、履歴、etc」#railsgirlstokyo

2013-08-10 14:09:50
みよひで画伯 @miyohide

udzura「アプリケーションを作るにあたって、どのような登場人物が出てくるかを考えるのが大事。最初から全部挙げなくても、作りながら追加していってもよい。」#railsgirlstokyo

2013-08-10 14:10:46
みよひで画伯 @miyohide

udzura「『客』にはどのような情報を保存すれば良いだろうか。名前、メールアドレス、住所、etc... では、『注文伝票』についてどのような情報があるだろうか考えてみよう。」#railsgirlstokyo

2013-08-10 14:12:55
みよひで画伯 @miyohide

udzura「注文伝票には、買った商品、数量、金額、買ったお店、買った日、買った人、etc」#railsgirlstokyo

2013-08-10 14:14:12
みよひで画伯 @miyohide

udzura「ここでちょっとだけ困ったことが起きます。注文履歴の例をExcelの表形式で表現すると、ちょっとした無駄が出てくる。」#railsgirlstokyo

2013-08-10 14:19:55
みよひで画伯 @miyohide

udzura「例えば、うづらさんが2回注文した場合、その個人情報(住んでいる場所とか)を2つ持つことになっている。これは無駄で、1個にまとめたい。」#railsgirlstokyo

2013-08-10 14:21:28
みよひで画伯 @miyohide

udzura「また、値段についても考えたい。りんごの値段を変えたい場合も、注文ごとに情報を持っていると無駄。一つに集約させたい。」#railsgirlstokyo

2013-08-10 14:22:20
みよひで画伯 @miyohide

udzura「このことを踏まえて、データの形式を無駄のない形にしたい。商品に関する情報は別に保存しておいて、注文履歴には、商品に対するリンクであるidを保存させる形を取るとムダを省くことができる。」#railsgirlstokyo

2013-08-10 14:25:36
みよひで画伯 @miyohide

udzura「同様に、お客様の情報についても、別に保存させておいて、注文には、お客様の情報に対してはidに対するリンクだけにする。」#railsgirlstokyo

2013-08-10 14:27:05
みよひで画伯 @miyohide

udzura「こうして得られるメリットは2つ。ひとつはデータが使いまわせる。もう一つはデータの更新が集約できる。」#railsgirlstokyo

2013-08-10 14:28:38
みよひで画伯 @miyohide

udzura「このことをデータベースの世界で『正規化』と言います。こうすることで、変更に強くなり、無駄がなくなる。非常に重要な操作。」#railsgirlstokyo

2013-08-10 14:30:50
みよひで画伯 @miyohide

udzura「今の段階で不便の点。1回の注文で複数の商品の注文ができない。複数の商品の注文をやりたい。」#railsgirlstokyo

2013-08-10 14:44:59
みよひで画伯 @miyohide

udzura「複数の商品を注文できるためには、一つの注文に対して、注文詳細を保存するものをつくる。そこで、注文に対して注文詳細のリンクをつけるようにする。」#railsgirlstokyo

2013-08-10 14:49:35
みよひで画伯 @miyohide

udzura「この例は他にも応用できる。例えば、本と著者の関係。1つの本が複数の著者で書かれることもあるし、一人の著者が複数の本を書くこともある。」#railsgirlstokyo

2013-08-10 14:51:22
みよひで画伯 @miyohide

udzura「このように、整理した『モデル』たちを図にしてみよう。モデルたちの『関係』を図にすることがよく有って、その図は『ER図』と呼んだりします。」#railsgirlstokyo

2013-08-10 14:53:19
みよひで画伯 @miyohide

udzura「そのようなモデルの『関係』には色いろある。1:1(ユーザーと所属会社の関係)、1:多(ユーザと注文履歴の関係)、多:多(ユーザーとフレンドの関係)がある。現実的に多いのは1:多。」#railsgirlstokyo

2013-08-10 14:57:05
みよひで画伯 @miyohide

udzura「本と著者との関係は多:多であるが、間に中間テーブルBookAuthorを入れると、中間テーブルとの間では1:多の関係となる。」#railsgirlstokyo

2013-08-10 15:04:31
みよひで画伯 @miyohide

udzura「RailsGirlsでhas_manyを書いたと思うが、それは、モデルの関係で言う1:多の関係。」#railsgirlstokyo

2013-08-10 15:06:05
みよひで画伯 @miyohide

udzura「同じく、has_manyでthroughを書いたこともあると思うが、それは中間テーブルを表している。」#railsgirlstokyo

2013-08-10 15:07:14
みよひで画伯 @miyohide

udzura「逆に、1:多の1の側ではbelongs_toで指定する。」#railsgirlstokyo

2013-08-10 15:07:38
みよひで画伯 @miyohide

udzura「以上がデータベースのモデリングの基礎で、これはRailsとかに限らない概念。」#railsgirlstokyo

2013-08-10 15:08:55
みよひで画伯 @miyohide

udzura「データベースはWebアプリの心臓です。」#railsgirlstokyo

2013-08-10 15:09:42
みよひで画伯 @miyohide

udzura「参考資料として『らくらくERDレッスン』(翔泳社)。10年ぐらいまえの本だが、おすすめ。」#railsgirlstokyo

2013-08-10 15:10:17