はじめに
今回はDBの基礎知識について少しお話しします
内容はいつにも増してしょぼいです笑
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです
目次
- DB(データベース)とは
- ORMとは
- database.ymlとは
- DB設計での注意点
- まとめ
DB(データベース)とは
DBとは、データを複数集めてあとで使いやすい形に整理した情報のかたまりのことを表し、データの保管場所のことをさします
DBにはいくつか種類があります
- 階層型データベース
- ネットワーク型データベース
- リレーショナル型データベース
階層型データベース
階層型データベースとは、名前の通りデータが階層のように構成されており、ツリー構造を取っています
一般的なPCのファイルやフォルダを思い浮かべてもらうと、イメージしやすいと思います
特徴としては速度が非常に早い事が挙げられます
反面、場合によっては重複登録や、情報の編集に対して柔軟性が低いというデメリットもあります
ネットワーク型データベース
階層型データベースの欠点を補う形で開発されました
重複登録をする必要がなくなり、柔軟性もアップしましたが、後述するリレーショナル型データベースがさらに利便性が高いため、シェアを落としていきました
リレーショナル型データベース
行と列からなる「表」でできたデータベース
列にはそれぞれ重複しない項目(カラム)を設定し、行をデータとして追加していきます
見やすさと、複数の表を結合することで、柔軟性を高めています
ORMとは
ORMとは、オブジェクト関係マッピング(Object-relational mapping)のことで、データベースとオブジェクト指向プログラミング言語の間の、非互換なデータを変換するプログラミング技法
具体的には、直接SQL文を書く代わりに、非常に短いコードでデータベースの読み書きを行える機能で、RailsではActiveRecordというモジュールで実装されている
database.ymlとは
Railsでの開発時、"rails db:create"のコマンドを実行した時に作成されるDBの名前を指定するファイル
また、RailsアプリケーションがSQLサーバーにアクセスするときのソケットファイルの位置を指定する
DB管理システムに関して
DBの管理システムには複数あります
- Oracle Database(有償)
- SQL Server(有償)
- MySQL(無償)
- PostgresSQL(無償)
- SQLite(無償)
他にもありますが、主だったものはこのくらいでしょうか
興味のある方は調べてみてもいいかもしれません
DB設計での注意点
DB設計をする際に気をつけたいのが、テーブル(表)をいくつ作り、そのテーブルにどんなカラムを持たせるかということです
Twitter(投稿のみの簡易版)を例に挙げてみましょう
この場合、すぐに思いつくテーブルとしては"Users","Tweets"の二つです
"Users"テーブルにはもちろんユーザー情報が入ります
"Tweets"テーブルのカラムには内容を示す文章(comment)と、画像(Image)が思いつくと思います
初めの設計段階で、画像の投稿が1枚だけと限定し、変更しなければこの設計でいいかもしれませんが、やっぱり2枚、いや4枚と後から仕様変更をする際、この設計では困ります
後からまたカラムを追加するという作業をしなくてはなりません
そこで、"Image"テーブルというものを別で作り、そちらで管理するようにするとどうでしょう
"Image"テーブルの方に、元となるTweetのidを紐付けできるカラムを初めから用意するだけで、DBを修正しなくても、一つのtweetに対して何枚でも画像を設定することが可能になります(詳細や実装は長くなるので書きません)
このように、手戻り作業をなくしたり、柔軟な対応をするためにも、DB設計は非常に重要な項目となります
まとめ
- DBはデータの保管場所
- DBには種類があり、現在はリレーショナル型が主流
- DB管理システムは有償・無償がある
- DB設計は非常に重要な項目