Was ist SQL? Und warum verwenden wir in Rails SQL fast nicht? - Die Existenzberechtigung von ActiveRecord
Viele Anfänger-Entwickler fühlen sich an diesem Punkt verwirrt.
Brauchen wir SQL nicht, wenn wir eine Datenbank verwenden?
Aber warum funktioniert ein Webdienst in Rails fast ohne SQL?
Was genau ist die Rolle von ActiveRecord, dass dies möglich ist?
Dieser Artikel erklärt genau den Kernpunkt.
1⃣ Was ist SQL? (nur die Essenz zusammengefasst)
SQL (Structured Query Language) ist
eine formelle Sprache zum Kommunizieren mit Datenbanken.
Wenn Sie mit der Datenbank arbeiten, verwenden Sie SQL.
Beispiel:
SELECT * FROM users WHERE age > 20;
Dieser Satz bedeutet
"Hole Datensätze aus der Tabelle 'users', bei denen das Alter größer als 20 ist".
Die Dinge, die Sie mit SQL tun können, lassen sich auf genau vier Punkte zusammenfassen.
Erstellen - Daten erstellen
Lesen - Daten lesen
Aktualisieren - Daten aktualisieren
Löschen - Daten löschen
Das heißt, CRUD.
Letztendlich
fordert jeder Webdienst
über SQL CRUD-Operationen von der Datenbank an.
2⃣ Aber in Rails verwenden wir SQL fast nicht. Warum? Weil es ActiveRecord gibt.
Eines der Kernkomponenten von Rails ist ActiveRecord.
ActiveRecord ist ein ORM (Object Relational Mapping).
Was bedeutet das?
3⃣ Was ist ORM? Ein System, das automatisch "Objekte ↔ Datenbanktabellen" verbindet
Programmiersprachen verwenden Objekte.
user = User.new(name: "bamcoding")
Datenbanken verwenden Datensätze.
1. Zeile der Tabelle users
Die Rolle von ORM ist nur eine:
"Objekte in der Ruby-Welt" mit "Datensätzen in der Datenbankwelt" automatisch zu verbinden.
Dadurch können wir
Datenbanken behandeln wie Objekte.
4⃣ Ersetzen von SQL durch ActiveRecord
Beispiel 1) Lesen von Daten (Read)
SQL:
SELECT * FROM users;
Rails:
User.all
Beispiel 2) Bedingte Suche
SQL:
SELECT * FROM users WHERE age > 20;
Rails:
User.where("age > 20")
Oder auf eine mehr Ruby-Weise:
User.where(age: 21..)
Beispiel 3) Erstellen (Create)
SQL:
INSERT INTO users (name, age) VALUES ('bamcoding', 34);
Rails:
User.create(name: "bamcoding", age: 34)
Beispiel 4) Aktualisieren (Update)
SQL:
UPDATE users SET age = 35 WHERE id = 1;
Rails:
user = User.find(1)
user.update(age: 35)
Beispiel 5) Löschen (Delete)
SQL:
DELETE FROM users WHERE id = 1;
Rails:
user = User.find(1)
user.destroy
5⃣ Kernpunkt: Rails-Entwickler arbeiten nicht mit SQL, sondern mit "Ruby" auf die Datenbank
Denn ActiveRecord
wandelt die von mir ausgeführten Ruby-Befehle
im Hintergrund in SQL um.
Das bedeutet,
Der Entwickler verwendet kein SQL, aber Rails erstellt und führt SQL intern aus.
Dank dessen kann der Entwickler
sich auf das Design der Geschäftslogik konzentrieren,
ohne die technische Belastung der direkten Steuerung der Datenbank.
6⃣ Der wahre Grund, warum ActiveRecord als "leistungsstark" bezeichnet wird
Die Stärke von ActiveRecord liegt nicht nur darin, dass "man kein SQL schreiben muss".
Das ist nur ein oberflächlicher Vorteil.
Die eigentliche Essenz sind die folgenden vier Punkte.
1) Das Modell und die DB-Tabelle sind automatisch verbunden
Wenn Sie das User-Modell erstellen,
wird automatisch eine Verbindung zur users-Tabelle hergestellt.
Sie müssen den Tabellennamen nicht anpassen
Sie müssen das Mapping nicht separat festlegen
Rails verbindet automatisch nach Konvention
Dies allein erhöht die Entwicklungsgeschwindigkeit explosionsartig.
2) Die Beziehungseinstellung ist überwältigend intuitiv
Beispiel:
class Building < ApplicationRecord
has_many :rooms
end
class Room < ApplicationRecord
belongs_to :building
end
Diese beiden Zeilen
lassen Rails standardmäßig Folgendes ausführen:
Erzeugt das richtige SQL JOIN
Unterstützt den Aufruf von
building.roomsVerwaltet automatisch den Fremdschlüssel
building_idOptimiert die beziehungsbezogene Abfrage
Um dies mit SQL direkt zu implementieren,
müssten Sie dutzende Zeilen JOIN, INDEX, Bedingungen schreiben.
ActiveRecord erledigt all dies
mit nur zwei Zeilen.
3) Sicherheit, Injektionsschutz, Abfrageoptimierung werden von Rails übernommen
Risiken bei der Verwendung von SQL direkt:
SQL-Injection
Leistungsprobleme durch falsche Abfragen
übermäßige Verwendung von SELECT *
Langsame Abfragen aufgrund fehlender INDEXe
ActiveRecord verhindert
die meisten Probleme im Voraus
oder wandelt sie in sichere SQL um.
Es ist das Sicherheitsnetz für Webentwickler.
4) Eine Entwicklungserfahrung, die vollständig in die Ruby-Syntax integriert ist
Sie können Abfragen auf eine Ruby-Weise zusammenstellen:
User.where(active: true)
.where("age > ?", 20)
.order(created_at: :desc)
.limit(10)
Es sieht aus wie Ruby-Code,
aber intern wird optimiertes SQL generiert.
Diese Fähigkeit zur "Codekombination"
macht ActiveRecord zu einem der leistungsstärksten ORMs.
7⃣ Fazit - Warum Rails-Entwickler SQL fast nicht verwenden
Weil ActiveRecord alle Komplexität von SQL abstrahiert hat
Weil Entwickler nur Ruby-Code schreiben müssen
Weil Modell-Beziehung-Abfrage-Speicherung-Löschung sich alle wie die Manipulation von Ruby-Objekten anfühlen
Weil Produktivität, Sicherheit und Wartbarkeit überwältigend verbessert werden
ActiveRecord ist nicht nur ein einfaches ORM, sondern
der Kernmotor der Rails-Produktivität.