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

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

밤치 238

データベースは巨大な '引き出し' です: 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サービスを作ってみようか?"

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

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

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

Get notified of new posts

We'll email you when Bamchi Blog publishes new content.

Your email will only be used for new post notifications.