データベースは巨大な「引き出し」です。

データベースは単純に '正確に整理された引き出し' です。Railsで記憶を保存して取り出す経験を通じてデータベースを理解してみてください。

밤치 32

データベースは巨大な '引き出し' です: Railsで記憶を保存して取り出す経験

私たちが最初にウェブサービスを作るとき、最も混乱する概念があります。

"私が入力した情報は…一体どこに保存されるのでしょうか?"

DBを理解するには壮大な概念は必要ありません。
DBは単純に '正確に整理された引き出し' です。

  • 引き出しは テーブル(table)

  • 1つの引き出しは レコード(record)

  • 引き出しの中のセルは カラム(column)

  • 引き出しの種類(Post、Userなど)は モデル(model)

  • 引き出しを開閉する動作が クエリ(query)

この比喩をつかむと、
DBはもはや難しい存在ではなく、
指先で理解できる、非常に物理的な概念になります。

さあ、Railsで直接作ってみましょう。


Part 1. "引き出し(Postテーブル)" を作成する

ターミナルで:

rails generate model Post title:string body:text
rails db:migrate

このコマンドは次のように言っているのと同じです。

"Postという名前の引き出しを1つ作ります。
引き出しの中に2つのセルを作ります。
1つはtitle(タイトルのセル)、
もう1つはbody(本文のセル)。"

Railsはこのコマンドを受け取り、
DBという大きな部屋に新しい引き出し(Postテーブル)を設置します。

その引き出しの各レコードには、
常にtitleとbodyという固定された2つのセルがあります。

これで保存の準備が整いました。


Part 2. "引き出し(レコード)" を1つ作成して引き出しに入れてみましょう

Rails consoleに入りましょう。

rails console

そして以下のコードで
引き出し(Post1つ) を作成して引き出しに入れます。

Post.create(title: "最初の投稿", body: "DB引き出しに保存されました!")

ここで起こること:

  • Post引き出しに

  • titleセルには "最初の投稿"

  • bodyセルには "DB引き出しに保存されました!"
    という内容で
    新しい引き出し(レコード)が追加されます。

この引き出しはもう絶対に消えません。
サーバーをオフにしてもオンにしてもそのまま残ります。

これがDBが "ウェブの記憶" である理由です。


Part 3. "引き出しを開いてみる":

保存された引き出しを取り出してみましょう

Post.all

RailsはDBにこう言います。

"Post引き出し、そこにあるすべての引き出しを取り出してください。"

するとDBは正確に私たちが入れた引き出しを表示します。

これがまさに
'絶対忘れない空間' の力です。


Part 4. "棚の構造を自動的に整理してくれる知能型引き出し"

Post.firstで1つ取り出して確認してみましょう。

post = Post.first
post.id
post.created_at
post.updated_at

DBは引き出しを入れる際に自動的に:

  • id(引き出し番号)

  • created_at(いつ入れたか)

  • updated_at(いつ修正したか)

このような メタ情報 も整理して保存します。

これは単なる引き出しではなく
精巧に整理されるスマート引き出し です。


Part 5. "人が何千もの引き出しをめくる必要はない"

DBは超高速司書のように即座に見つけてくれます

例えば
タイトルが "最初の投稿" の引き出しを見つけたい場合:

Post.where(title: "最初の投稿")

この1行で
DBは何千もの中から
ちょうど合う引き出しを取り出してくれます。

まるで "司書" が引き出し番号、位置、属性を
すぐに把握するかのようです。

このような高速検索機能のおかげで
DBはウェブサービスの 速度と正確性 を担当します。


Part 6. "引き出しと引き出しをつなぐ知的ネットワーク"

コメント(Comment)をPost引き出しとつないでみましょう

次のコマンドを入力します。

rails generate model Comment body:text post:references
rails db:migrate

これは次のように解釈できます。

"コメント(Comment)を保存する引き出しも1つ作成してください。
引き出しの中に 'body' というセルがあり、
そしてこの引き出し(Comment)がどのPost引き出しに属するかも覚えておいてください。"

Railsは
Comment引き出しに自動的に post_id というセルを作成して
"この引き出しはこのPost引き出しに属します"
という接続情報を保存します。

これはまるで
引き出しの横に
"この引き出しはPost #1に所属します"
というステッカーを貼っておくのと同じです。


Part 7. Railsに関係を教えてあげましょう

app/models/post.rb

class Post < ApplicationRecord
  has_many :comments
end

app/models/comment.rb

class Comment < ApplicationRecord
  belongs_to :post
end

Railsにこれを伝えることは次のとおりです。

"Post引き出しはComment引き出しを複数持つことができます。"
"Comment引き出しは必ずPost引き出しに属していなければなりません。"

これでDBは
引き出し同士の 関係(relationship) を知っています。

この構造こそが
ウェブサービスを構成する知的ネットワーク です。


Part 8. 実際にデータをつないでみましょう

consoleで:

post = Post.first
post.comments.create(body: "この投稿面白い!")
post.comments.create(body: "2番目のコメント!")

そしてコメントを取り出してみましょう。

post.comments

出力結果には
さっき作ったコメント2つが含まれています。

これを見て、あなたは気づきます。

  • DBは単なる保存場所ではなく

  • 異なる情報を つなぎ合わせて

  • 1つの知的ネットワークを作り上げているという事実を。

このつながりのおかげで
ウェブサービスは "有機体" のように機能します。


Part 9. これであなたはDBがなぜ

'ウェブサービスの中心' なのかを感じました

これまで直接追いかけながら
あなたはDBの本質を正確に体験しました。

ウェブサービスの記憶

→ データを保存して取り出すことができます。

絶対忘れない空間

→ 再起動してもPostとCommentはそのまま残ります。

精巧に整理された引き出し

→ 構造化されたセル、自動整理されるメタ情報(id、timestamps)

数百万件でも即座に見つける司書

→ where条件で直接検索可能

つながった知的ネットワーク

→ Post ↔ Comment 関係の設定

ウェブサービスの中心

→ 保存 + 検索 + 関係 = ウェブのすべての機能

これらすべてを
あなたは今 直接作成して操作できます。


そして読者の心には次の考えが芽生え始める

"ちょっと待って…私本当にウェブサービスを作れる人なのか?"

"自分だけのブログを作れるかもしれない!"

"友達と一緒に使うTODOサービスを作ってみようか?"

"私が入力したデータが保存されて、つながり、呼び出されるのが理解できた!"

この覚醒の瞬間を過ぎると
ウェブはもはや "使う世界" ではなくなります。
ウェブはあなたが 作り出す世界 になります。