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

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

• bamchi • 5,444

データベースは巨大な都市です - 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)の考え方を持つ開発者になったのです。

コメント

コメントする

メールアドレスは公開されず、返信通知にのみ使用されます。

続けて読む

新しい記事の通知を受け取る

Bamchi Blogに新しい記事が公開されたらメールでお知らせします。

メールアドレスは新着記事のお知らせにのみ使用します。