データベースは巨大な都市です。

データベースは巨大な都市です。Railsで都市を設計しながらDBを直感的に理解できます。都市の比喩でDBの構造とデータモデルを自然に理解してみてください。

bamchi 488

データベースは巨大な都市です - Railsで都市を設計しながらDBを直感的に理解する

私たちはこれまで
データベース(DB)を引き出しや箱に例えてきました。

今回は完全に異なる世界に行ってみましょう。

DB = 都市と考えてみましょう。

都市には区域があり、建物があり、
その中にはたくさんの部屋があります。

  • Database = 都市全体

  • Table = 建物(Building)

  • Record = 部屋(Room)

  • Column = 部屋の中の属性(サイズ、用途、価格など)

都市の比喩は
DBの構造的な概念と
関係データモデルを
最も自然に理解できる比喩です。

さあ、Railsで直接「都市を設計」しながら
DBがどのように構成されるかを直接体験しましょう。


Part 1. DBという都市に最初の建物(Building)を建てる

ターミナルで:

rails generate model Building name:string floors:integer
rails db:migrate

このコマンドは次のように解釈できます。

「都市(DB)にBuildingという建物を建てるよ。
建物には名前(name)と階数(floors)という2つの属性があるよ。」

Railsはこのコマンドを基に
都市に建物を建て、建物ごとに共通で存在する属性(カラム)を定義します。

これで私たちの都市には
Buildingという建物が存在します。


Part 2. 建物内に「部屋(Room)」を作成できるようにする

建物(Building)に実際の部屋があると
人々が住むこともでき、
賃料を受け取ることもでき、
都市が意味を持ちます。

そのため、部屋(Room)テーブルを作成してみましょう。

rails generate model Room number:string size:integer building:references
rails db:migrate

これは次のことを意味します:

「Roomという部屋を作成し、
その部屋がどのBuilding(建物)に属するかを示して。」

Railsは自動的にbuilding_idというカラムを作成し
部屋がどの建物に属するかを関連付けしてくれます。

これが
DBの関係(relationship)です。
(都市の比喩からは非常に自然で説明が必要ないほどです!)


Part 3. Railsに「建物と部屋の関係」を教える

app/models/building.rb

class Building < ApplicationRecord
  has_many :rooms
end

app/models/room.rb

class Room < ApplicationRecord
  belongs_to :building
end

これでRailsは完全に理解しました。

  • 建物(Building)の中には部屋(Room)が複数あります

  • 部屋(Room)は必ずどの建物(Building)に属します

都市の比喩から
あまりにも当然の構造
DBの核心原理であることに気づく瞬間です。


Part 4. コンソールで直接「建物を一つ建てる」

Rails consoleで:

b = Building.create(name: "スタータワー", floors: 30)

ここで私たちは
都市(DB)の中に
‘スタータワー’という実際の建物を一つ建てました。


Part 5. 部屋(Room)を建物内に作成する

b.rooms.create(number: "101", size: 28)
b.rooms.create(number: "102", size: 33)
b.rooms.create(number: "201", size: 40)

これで‘スタータワー’建物の中には
3つの部屋ができました。

この瞬間、
都市 → 建物 → 部屋
という構造が
DBの構造的本質と1:1で一致します。


Part 6. 部屋を検索してみましょう

(都市で特定の建物の部屋リストを見る感じで)

b.rooms

Railsはこのように要求します。

「この建物(Building)のすべての部屋(Room)を表示して!」

DBは
都市の100万件の建物中
‘スタータワー’に属する部屋だけ正確に見つけてくれます。

これがデータベースが
現代のウェブサービスの‘都市行政システム’のように
すべてのデータを迅速かつ正確に管理できる理由です。


Part 7. 特定の属性を基準に部屋を探す

(不動産検索のような感じ)

Room.where(size: 33)

このコマンドは:

「都市全体からサイズが33の部屋だけ見つけて!」

ウェブで部屋情報を検索するように
DBは数千・数万件中から
条件に一致する部屋だけ選んでくれます。


Part 8. これで読者は気づく

「ああ… DBが都市であり、
テーブルが建物であり、
レコードが部屋という言葉があまりにも自然だ。」

「実際にRailsで都市を建てる感じがして
頭の中で概念がはっきりする。」

「それならば私も都市設計のように
ウェブサービスのデータを設計できるはずだ!」

この感覚が生まれる瞬間、
DBはもはや抽象的な技術ではありません。

あなたは今
設計者(Architect)の考え方を持つ開発者になったのです。

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.