Datenbanken sind wie eine riesige Stadt - Entwerfen Sie Städte mit Rails und verstehen Sie Datenbanken intuitiv
Bis jetzt haben wir Datenbanken in Schubladen oder Kisten gesteckt.
Lass uns dieses Mal in eine völlig andere Welt gehen.
Denken wir an DB = Stadt.
Eine Stadt hat Bezirke, Gebäude und darin viele Räume.
Datenbank = Gesamte Stadt
Tabelle = Gebäude
Datensatz = Raum
Spalte = Eigenschaften im Raum (Größe, Verwendung, Preis usw.)
Die Stadtmethapher ist die natürlichste Methode, um das strukturelle Konzept der Datenbank und das relationale Datenmodell zu verstehen.
Lassen Sie uns jetzt direkt mit Rails "Städte entwerfen" und erleben, wie die Datenbank aufgebaut ist.
Teil 1. Das erste Gebäude in der Stadt namens DB errichten
Im Terminal:
rails generate model Building name:string floors:integer
rails db:migrate
Diese Befehle können wie folgt interpretiert werden.
"Ich werde ein Gebäude namens Building in der Stadt (DB) bauen.
Das Gebäude hat Eigenschaften wie Namen (name) und Stockwerke (floors)."
Rails errichtet aufgrund dieses Befehls Gebäude in der Stadt und definiert Eigenschaften (Felder), die in jedem Gebäude gemeinsam vorhanden sind.
Jetzt gibt es in unserer Stadt ein Gebäude namens Building.
Teil 2. Es möglich machen, "Räume" im Gebäude zu erstellen
Es müssen tatsächlich Räume im Gebäude vorhanden sein, damit Menschen darin leben können, Miete erhalten können und die Stadt Bedeutung hat.
Lassen Sie uns also versuchen, eine Tabelle für Räume zu erstellen.
rails generate model Room number:string size:integer building:references
rails db:migrate
Das bedeutet:
"Erstelle einen Raum namens Room und
zeige, zu welchem Gebäude (Building) diese Räume gehören."
Rails erstellt automatisch ein Feld namens building_id, um die Verbindung zwischen Räumen und dem zugehörigen Gebäude herzustellen.
Das ist die Beziehung (relationship) der Datenbank.
(So natürlich in der Stadtmethapher, dass keine Erklärung erforderlich ist!)
Teil 3. Rails beibringen, die "Beziehung zwischen Gebäude und Räumen" zu verstehen
app/models/building.rb
class Building < ApplicationRecord
has_many :rooms
end
app/models/room.rb
class Room < ApplicationRecord
belongs_to :building
end
Jetzt hat Rails es vollständig verstanden.
Im Gebäude (Building) gibt es mehrere Räume
Räume (Room) gehören immer zu einem bestimmten Gebäude (Building)
In der Stadtmethapher ist dies der Moment, in dem Sie erkennen, dass die so offensichtliche Struktur die grundlegende Prinzipien der Datenbank sind.
Teil 4. Erstellen wir ein "Gebäude" direkt in der Konsole
Im Rails-Konsolenmodus:
b = Building.create(name: "Star Tower", floors: 30)
Hier haben wir in der Stadt (DB) ein echtes Gebäude namens "Star Tower" errichtet.
Teil 5. Erstellen wir Räume im Gebäude
b.rooms.create(number: "101", size: 28)
b.rooms.create(number: "102", size: 33)
b.rooms.create(number: "201", size: 40)
Jetzt gibt es im Gebäude "Star Tower" drei Räume.
In diesem Moment passt die Struktur Stadt → Gebäude → Raum genau zur strukturiellen Essenz der Datenbank.
Teil 6. Schauen wir uns die Räume an
(Wie das Anzeigen der Raumliste in einem bestimmten Gebäude in der Stadt)
b.rooms
Rails fordert so an:
"Zeige mir alle Räume dieses Gebäudes (Building)!"
Die Datenbank findet genau die Räume, die zum "Star Tower" gehören, aus einer Million Gebäuden in der Stadt.
Das ist der Grund, warum die Datenbank wie ein "Stadtverwaltungssystem" für moderne Webdienste alle Daten schnell und präzise verwalten kann.
Teil 7. Räume basierend auf bestimmten Eigenschaften finden
(Wie bei einer Immobiliensuche)
Room.where(size: 33)
Dieser Befehl bedeutet:
"Finde alle Räume in der gesamten Stadt mit einer Größe von 33."
Wie bei der Suche nach Rauminformationen im Web wählt die Datenbank Tausende oder Zehntausende von Räumen aus, die den Kriterien entsprechen.
Teil 8. Jetzt verstehen Sie
"Oh... Die DB ist die Stadt,
die Tabelle ist das Gebäude,
der Datensatz ist der Raum, das klingt so natürlich.""Tatsächlich fühlt es sich an, als würde man mit Rails eine Stadt bauen,
und das Konzept wird klar in meinem Kopf.""Dann könnte ich, wie beim Entwerfen einer Stadt,
auch das Design von Daten für Webdienste erstellen, oder?"
In dem Moment, in dem dieses Gefühl entsteht,
ist die Datenbank nicht mehr nur eine abstrakte Technologie.
Sie sind jetzt ein Entwickler mit dem Denken eines Architekten.