できる!「データベース設計」on Rails Girls Tokyo More
udzura「ワークショップ形式で、例としてお買物サイトを考えてみましょう。どんなモノが存在するか?」 #railsgirlstokyo
2013-08-10 14:07:28udzura「アプリケーションを作るにあたって、どのような登場人物が出てくるかを考えるのが大事。最初から全部挙げなくても、作りながら追加していってもよい。」#railsgirlstokyo
2013-08-10 14:10:46udzura「『客』にはどのような情報を保存すれば良いだろうか。名前、メールアドレス、住所、etc... では、『注文伝票』についてどのような情報があるだろうか考えてみよう。」#railsgirlstokyo
2013-08-10 14:12:55udzura「ここでちょっとだけ困ったことが起きます。注文履歴の例をExcelの表形式で表現すると、ちょっとした無駄が出てくる。」#railsgirlstokyo
2013-08-10 14:19:55udzura「例えば、うづらさんが2回注文した場合、その個人情報(住んでいる場所とか)を2つ持つことになっている。これは無駄で、1個にまとめたい。」#railsgirlstokyo
2013-08-10 14:21:28udzura「また、値段についても考えたい。りんごの値段を変えたい場合も、注文ごとに情報を持っていると無駄。一つに集約させたい。」#railsgirlstokyo
2013-08-10 14:22:20udzura「このことを踏まえて、データの形式を無駄のない形にしたい。商品に関する情報は別に保存しておいて、注文履歴には、商品に対するリンクであるidを保存させる形を取るとムダを省くことができる。」#railsgirlstokyo
2013-08-10 14:25:36udzura「同様に、お客様の情報についても、別に保存させておいて、注文には、お客様の情報に対してはidに対するリンクだけにする。」#railsgirlstokyo
2013-08-10 14:27:05udzura「こうして得られるメリットは2つ。ひとつはデータが使いまわせる。もう一つはデータの更新が集約できる。」#railsgirlstokyo
2013-08-10 14:28:38udzura「このことをデータベースの世界で『正規化』と言います。こうすることで、変更に強くなり、無駄がなくなる。非常に重要な操作。」#railsgirlstokyo
2013-08-10 14:30:50udzura「今の段階で不便の点。1回の注文で複数の商品の注文ができない。複数の商品の注文をやりたい。」#railsgirlstokyo
2013-08-10 14:44:59udzura「複数の商品を注文できるためには、一つの注文に対して、注文詳細を保存するものをつくる。そこで、注文に対して注文詳細のリンクをつけるようにする。」#railsgirlstokyo
2013-08-10 14:49:35udzura「この例は他にも応用できる。例えば、本と著者の関係。1つの本が複数の著者で書かれることもあるし、一人の著者が複数の本を書くこともある。」#railsgirlstokyo
2013-08-10 14:51:22udzura「このように、整理した『モデル』たちを図にしてみよう。モデルたちの『関係』を図にすることがよく有って、その図は『ER図』と呼んだりします。」#railsgirlstokyo
2013-08-10 14:53:19udzura「そのようなモデルの『関係』には色いろある。1:1(ユーザーと所属会社の関係)、1:多(ユーザと注文履歴の関係)、多:多(ユーザーとフレンドの関係)がある。現実的に多いのは1:多。」#railsgirlstokyo
2013-08-10 14:57:05udzura「本と著者との関係は多:多であるが、間に中間テーブルBookAuthorを入れると、中間テーブルとの間では1:多の関係となる。」#railsgirlstokyo
2013-08-10 15:04:31udzura「RailsGirlsでhas_manyを書いたと思うが、それは、モデルの関係で言う1:多の関係。」#railsgirlstokyo
2013-08-10 15:06:05udzura「同じく、has_manyでthroughを書いたこともあると思うが、それは中間テーブルを表している。」#railsgirlstokyo
2013-08-10 15:07:14udzura「参考資料として『らくらくERDレッスン』(翔泳社)。10年ぐらいまえの本だが、おすすめ。」#railsgirlstokyo
2013-08-10 15:10:17