見出し画像

SQLiteとSQLを混同していました。

RailsのActiveRecordを理解するために、リレーショナルデータベース管理システム(RDBMS)やSQL(構造化クエリ言語)について勉強してみました。
そこで気がついたのは「SQLiteとSQLって別なんだ!」という事です。

• SQLiteリレーショナルデータベース管理システム(RDBMS)の製品のひとつ

• SQLはRDBMSの色んな製品で共通して使えるデータベース言語

なんですね!
めちゃくちゃごっちゃにしていました。

勉強した事を簡単にまとめるとこんな感じです。


リレーショナルデータベース管理システム(RDBMS)について知る

リレーショナルデータベースとは

データベースには以下の3種類の形があるようです。

下記サイトのスクショです。
分かりやすかったのでそのままお借りします。

「階層型やネットワーク型はどんな時に使うんだろう?」と思いましたが、現在主流なのはリレーショナル型のようです。

リレーショナルデータベース管理システム(RDBMS)とは

“リレーショナル型のデータベースを管理するシステム”という事ですよね。

これには、商用のもの(企業から提供されている商品)とオープンソースのもの(有志の開発者コミュニティで開発され、自由に利用・改変可能)があるようです。

商用のRDBMS
• Oracle Database(Oracle)
• Microsoft SQL Server(Microsoft)
• IBM DB2(IBM)

オープンソースのRDBMS
• MySQL
• Postgre SQL
• SQLite

そしてこのRDBMSの機能は以下の4つのようです。

リレーショナルデータベース管理システム(RDBMS)の機能

  1. データベース言語の提供

  2. トランザクション処理

  3. 障害からの復旧

  4. 分散データベース


それぞれの項目を見ていくとこんな感じ。

1.データベース言語の提供

ユーザーやアプリケーションがRDBMSに指示を与えデータを利用するための言語(データベース言語)を提供します。RDBMSのデータベース言語は「SQL」です。

2.トランザクション処理

トランザクションとはデータをある一貫した状態にするためのひとまとまりの処理です。
例えば販売管理システムにおいてある商品を販売した場合、
① 在庫管理テーブルを更新し在庫を減らす
② 販売記録テーブルに情報を追加する
③ 販売明細記録テーブルに情報を追加する
というように、データに矛盾がないようにするためには複数のテーブル更新が必要になります。この一連の処理がトランザクションです。

3.障害からの復旧

RDBMSは、ハードウェアの障害やユーザーの誤操作などでデータが損失するといったデータベース障害が発生した際に、データの信頼性を保証するための機能を備えています。障害からの回復にはバックアップファイル(ある時点でのデータベースの情報をコピーしたファイル)と、バックアップ取得以後のログファイル(データベースに対してどんな変更を行ったかの履歴)が必要です。障害が発生した場合、データベースをバックアップファイルと置き換えたのちに、ログファイルに記録された変更を再度RDMSに実行させることで障害発生前のデータを回復させることができます。

4.分散データベース

ネットワークで接続された複数のデータベースをあたかもひとつのデータベースのように動かす技術です。分散データベースを構成しているデータベースであれば、一回の問い合わせで別々のデータベースから同時にデータを取得することができます。同様に、データの変更も同時に行うことができます。この時、ユーザーはデータが格納されている場所を意識する必要がありません。分散データベースを構築することで、仮に一つのデータベースに障害が発生してもほかのデータベースにアクセスすることでシステム全体が利用不可になることを防ぐことができます。また、処理性能の向上も期待できます。

データベースは普段見えない部分なのであまり実感はなかったですが、こんなに色々な機能があったんですね。

まとめ

学んだ事をまとめると、
「SQLiteはRDBMSのひとつで、SQLはRDBMSで使えるデータベース言語で、(私はRailsをインストールした時にSQLiteを利用できるように設定していたので、Railsで使っていたであろう)SQLはSQLiteによって提供されていた」
という事ですね。

そしてさらに以下のサイトの内容もまとめると、「本来であればデータベースとデータのやり取りをするにはSQLで書く必要があるけれど、Railsではそれをサポートする機能(Active Record)を用意しているので、SQLより簡単なコードでデータのやり取りが出来ますよ」という事みたいです!

このサイトではRailsのコードがどのようなSQLに変換されるのかも書いてくれています。

例えばよく使っていたbook = Book.find(1)なんかは、SELECT * FROM books WHERE (books.id = 1) LIMIT 1 というのが同等のSQLになるようです。

SQLでは “SELECT” というのがデータベースからデータを取り出すための構文だそうです。

SQLの構文はこのサイトが参考になりました

SELECT文の書き方はこんな感じらしいです。

上記サイトのスクショです。

こんな感じで長くて難しいので、Railsを使う人がコードを短く直感的に書くだけで済むように、Railsのソースコードの部分でActive Recordというクラスを作ってSQLに変換出来るように定義してくれているのかなと思っています。

以上、今回の学びでした!

この記事が気に入ったらサポートをしてみませんか?