はじめに
超初心者の私にわかりやすい、データベース設計の情報があまりなかったため、こちらで研究したものを書いていき、分かる方がいれば共有いただけると大変助かります。
設定環境
- OS
- Mac OS X
- 10.12.6
- Mac OS X
- Software
- PostgreSQL
- 10.1
- Ruby
- 2.5.0
- Rails
- 5.1.5
- PostgreSQL
Railsアプリを開発する上で必要なデータベースについて
ここではRailsアプリ向けのデータベース(DB)設計を効率よく理解し、作成する方法を研究していきたいと思います。
明確化したいことは以下です。
・Railsアプリを作る時にデータベースどうすればいいの?
・DB設計の基礎?知っておくべきことは?
・ユーザー(userid, email, password)DBを作成してみよう
・ローカル環境でDB設定した場合、本番ではどうなるん?
それでは上記4つを順番に研究していきましょう。
Railsアプリを作る時にデータベースは必須
基本的にブログやウェブサービスなどを目的とするRailsアプリを作る場合は、
データベースがないとRailsアプリ自体が成り立ちません。
ですので、必ずデータベースを理解する必要があります。
ただデータベースという名前に初心者は恐れがちですので、
想像すべきはエクセルのテーブルを、Railsアプリ内のファイルで構築して、
テーブル内の情報を必要なときに持ってくるみたいなイメージらしいです。
データベース設計の基礎は?
設計の基礎としてまず考えるべきことは、
まずRailsアプリの中でどのようなデータを持つことになるのかを考えることです。
Todoアプリの内容を登録する場合、
Todoテーブルを
タイトル
本文
ステータス
優先度
のような形で作ります。
これらの情報を残したいデータとして、データベースに残しておけば、
更新、削除、参照などができるようになります。
初心者として引っかかりやすいのは、データベース設計が壮大なものに思えて、挫折してしまいがちな点です。
まずは簡単なテーブルを作ってみて、それをデータベースとしてみましょう。
あとデータベースの基礎として以下を覚えておきたいです。
テーブル(例えばブログデータベースを持っていたら、ユーザーテーブル、記事テーブル、コメントテーブルなどを作っていくようです。)
・列(カラム)(例えば上記の記事のテーブルであれば、列はタイトルと本文)
・行(レコード・ロウ)(例えば上記の記事テーブルであれば、記事ひとつひとつを表すとのこと)
ユーザーテーブルを作成してみよう
例えば先ほどのTodoアプリを置き換えて、ユーザーと企業のマッチングアプリを考えてみましょう。
仮のユーザーテーブルの内容は以下にします。
userid
email
password
こちら参考になります。
http://asobo.hatenablog.jp/entry/2016/01/17/120514
http://www.opentone.co.jp/news/release/article03/article0303.html
もうひとつテーブルを作成して、テーブルを紐づけてみましょう
そしてこれとは別で企業テーブルを作ることとします。
企業ID
企業名
企業情報
のようなコンテンツが入ってるテーブルです。
2つのテーブルを作ったら、片方に関連付け用の情報を入れる
ユーザーテーブル
userid
email
password
ユーザーが興味のある企業:
このふたつのテーブルの関連付けがリレーションと言われるものらしいです。
DBのリレーション
復習になりますが、例えばユーザーの情報が以下のデータベースで保管されているとすると、このユーザーが興味を持っている企業を関連づける場合にはこのような構成で考えるようです。
ユーザーDB
・userid:xxxxx
・email:test@test.com
・password:xxxxxx
・interest: 企業ID-A, 企業ID-B
企業DB
・企業ID:企業ID-A
・企業名:xxxxx
・企業情報:xxxxx
これから先を研究中です。
ローカル環境でDB設定した場合、本番ではどうなるん?
Railsを使ってアプリを作っている場合は、ローカルでデータベース作成した場合は、STG,本番でもrake db/Migrateすれば使えようです。
逆に本番から取ってきて、落とし込むのはデータの中身を取ってくる時だけとのことです。
pgAdminとは
Postgresqlのデータベースを簡単に管理または作成にあたり、
pgAdminというものがあるらしい。。(研究中)
https://allabout.co.jp/gm/gc/47328/
参考サイト
http://asobo.hatenablog.jp/entry/2016/01/17/120514
http://www.opentone.co.jp/news/release/article03/article0303.html
https://academy.gmocloud.com/know/20160425/2259