Qu'est-ce que SQL? Et pourquoi n'utilisons-nous presque pas SQL dans Rails? - Raison d'être d'ActiveRecord
De nombreux développeurs débutants se sentent confus à ce stade.
Si nous utilisons une base de données, n'avons-nous pas besoin de SQL?
Mais dans Rails, le service Web fonctionne presque sans SQL?
Quel est exactement le rôle d'ActiveRecord pour que cela soit possible?
Cet article explique clairement ce point central.
1⃣ Qu'est-ce que SQL? (Résumé de l'essentiel)
SQL (Structured Query Language) est
le langage officiel pour interagir avec les bases de données.
Lorsque vous effectuez des opérations sur une base de données, vous utilisez SQL.
Exemple:
SELECT * FROM users WHERE age > 20;
Cette phrase signifie
"Récupérez les enregistrements de la table des utilisateurs où l'âge est supérieur à 20".
Les tâches que vous pouvez effectuer avec SQL se résument à quatre:
Créer - Créer des données
Lire - Lire des données
Mettre à jour - Mettre à jour des données
Supprimer - Supprimer des données
En d'autres termes, CRUD.
Tous les services Web finissent par
demander un CRUD à la base de données via SQL.
2⃣ Cependant, dans Rails, nous n'utilisons presque pas SQL. Pourquoi? Parce qu'il y a ActiveRecord.
L'un des composants clés de Rails est ActiveRecord.
ActiveRecord est un ORM (Object Relational Mapping).
Qu'est-ce que cela signifie?
3⃣ Qu'est-ce qu'un ORM? Un système qui relie automatiquement les "objets ↔ bases de données (tables)"
Les langages de programmation utilisent des objets.
user = User.new(name: "bamcoding")
Les bases de données utilisent des enregistrements.
Ligne 1 de la table des utilisateurs
Le rôle de l'ORM est unique:
Relier automatiquement les "objets du monde Ruby" aux "enregistrements du monde de la base de données".
Cela nous permet de manipuler
la base de données comme nous manipulons les objets.
4⃣ Remplacement de SQL par ActiveRecord
Exemple 1) Lecture de données (Read)
SQL:
SELECT * FROM users;
Rails:
User.all
Exemple 2) Recherche de conditions
SQL:
SELECT * FROM users WHERE age > 20;
Rails:
User.where("age > 20")
Ou de manière plus Ruby-esque:
User.where(age: 21..)
Exemple 3) Création (Create)
SQL:
INSERT INTO users (name, age) VALUES ('bamcoding', 34);
Rails:
User.create(name: "bamcoding", age: 34)
Exemple 4) Mise à jour (Update)
SQL:
UPDATE users SET age = 35 WHERE id = 1;
Rails:
user = User.find(1)
user.update(age: 35)
Exemple 5) Suppression (Delete)
SQL:
DELETE FROM users WHERE id = 1;
Rails:
user = User.find(1)
user.destroy
5⃣ Essentiel: Les développeurs Rails manipulent la base de données avec "Ruby" et non avec SQL
Parce qu'ActiveRecord
convertit mes commandes Ruby
en SQL en arrière-plan.
En d'autres termes,
Même si les développeurs n'utilisent pas SQL, Rails génère et exécute du SQL en interne.
Cela permet aux développeurs
de se concentrer sur la conception de la logique métier
sans avoir à gérer directement la base de données.
6⃣ La vraie raison pour laquelle ActiveRecord est "puissant"
La force d'ActiveRecord ne se résume pas simplement à "ne pas avoir à utiliser SQL".
Ce n'est qu'un avantage superficiel.
Les quatre véritables avantages sont les suivants.
1) Le modèle (Model) et la table de la base de données sont automatiquement liés
Lorsque vous créez un modèle User,
il est automatiquement lié à la table users.
Pas besoin de nommer les tables
Pas besoin de spécifier de mappages
Rails gère automatiquement la liaison selon la convention
Cela accélère considérablement le développement.
2) La configuration des relations est extrêmement intuitive
Exemple:
class Building < ApplicationRecord
has_many :rooms
end
class Room < ApplicationRecord
belongs_to :building
end
Ces deux lignes
font que Rails effectue automatiquement les actions suivantes:
Créer un JOIN SQL approprié
Prend en charge l'appel building.rooms
Gérer automatiquement la clé étrangère building_id
Optimiser les requêtes basées sur les relations
Pour implémenter cela directement en SQL,
vous auriez besoin de dizaines de lignes de JOIN, INDEX, conditions.
ActiveRecord accomplit tout cela
en deux lignes seulement.
3) Rails gère la sécurité, la prévention des injections, et l'optimisation des requêtes
Les risques liés à l'utilisation directe de SQL:
Injection SQL
Dégradation des performances due à des requêtes incorrectes
Abus de SELECT *
Requêtes lentes en raison d'INDEX manquants
ActiveRecord prévient la plupart de ces problèmes ou
convertit en SQL sécurisé.
C'est le filet de sécurité du développeur Web.
4) Une expérience de développement parfaitement intégrée avec la syntaxe Ruby
Vous pouvez assembler des requêtes de manière Ruby-esque:
User.where(active: true)
.where("age > ?", 20)
.order(created_at: :desc)
.limit(10)
Cela ressemble à du code Ruby,
mais génère du SQL optimisé en interne.
Cette capacité de "composition de code"
fait d'ActiveRecord l'un des ORM les plus puissants.
7⃣ Conclusion - Pourquoi les développeurs Rails n'utilisent presque pas SQL
ActiveRecord a abstrait toute la complexité de SQL
Les développeurs n'ont qu'à écrire du code Ruby
Le modèle-relation-requête-stockage-suppression se fait comme manipuler des objets Ruby
La productivité, la sécurité et la maintenabilité s'améliorent de manière écrasante
ActiveRecord n'est pas seulement un simple ORM,
c'est le moteur central de la productivité de Rails.