Les bases de données peuvent être difficiles à comprendre. Cependant, ils sont essentiels à la programmation complète et à la création de services back-end qui stockent des données.
Dans cet article, je vais démystifier SQL, les bases de données et les systèmes de gestion de bases de données relationnelles. J'utiliserai également des analogies avec le monde sorcier, y compris Harry Potter lui-même et certains des cours qu'il suit à Poudlard.
Avant de plonger dans les termes clés, définissons ce qu'est une base de données :
Une base de données est un ensemble structuré de données détenues dans un ordinateur, en particulier accessible de différentes manières. Il s'agit essentiellement d'un ensemble organisé de données sur un ordinateur, auquel on peut accéder électroniquement à partir d'un système informatique.
Termes clés
Vous trouverez ci-dessous quelques termes clés par lesquels nous commencerons :
- RDMS : Systèmes de gestion de bases de données relationnelles. Ce cadre pour les bases de données est la base de MySQL.
- SQL : Langage de requête structuré.
- Tableaux : Objets de base de données qui transportent des données. Un exemple de nom de table est "Etudiants", ou "Enseignants", ou "Cours".
- Champs : Les valeurs d'une table sont appelées champs. Des exemples de champs pour les étudiants seraient "Prénom", "Nom" et "GPA".
- Enregistrement/Ligne : Une entrée individuelle dans le tableau.
Après avoir ajouté des enseignants et des cours à la base de données, nous pouvons avoir des tables pour les étudiants, les enseignants et les cours.
Au fur et à mesure que nous avancerons dans le guide, nous n'utiliserons que les Étudiants exemple ici comme référence. Si vous avez eu la chance d'être embauché en tant qu'ingénieur logiciel à Poudlard, votre base de données pourrait faire bon usage de certaines de ces commandes :D
Instructions SQL
Syntaxe
Le point-virgule est le moyen standard de séparer une instruction SQL d'une autre. Il permet d'exécuter plusieurs instructions SQL dans le même appel. Dans ce guide, nous aurons un point-virgule à la fin de chaque instruction.
Les commandes SQL les plus importantes
Créer :Crée une nouvelle table SQL.
Si nous devions créer la base de données des élèves de l'école de Poudlard, par exemple, nous utiliserions CREATE faire une table appelée "Etudiants".
- Syntaxe
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
- Exemple
CREATE TABLE Students
(first_name VARCHAR(255),
last_name VARCHAR(255),
login VARCHAR(255),
age INTEGER,
gpa REAL,
house VARCHAR(255));
Laisser tomber :Supprime un tableau. Soyez très prudent lorsque vous utilisez cette commande car cela effacera toutes les données du tableau !
Si nous voulions supprimer l'intégralité de la base de données des étudiants, nous utiliserons DROP pour effectuer cette action.
- Syntaxe
DROP TABLE table_name;
- Exemple
DROP TABLE Students;
Insérer :ajoute de nouvelles lignes de données à une table.
Nous utiliserions INSERT pour ajouter de nouveaux étudiants au fur et à mesure qu'ils s'inscrivent à Poudlard.
- Syntaxe
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
- Exemple
INSERT
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES
('Harry', 'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2', 15, 4.5, 'Gryffindor'),
('Ron', 'Weasley','weasley7', 15, 3.7, 'Gryffindor'),
('Draco', 'Malfoy', 'malfoy999', 15, 4.0, 'Slytherin'),
('Cedric', 'Diggory','diggory123', 15, 4.0, 'Hufflepuff');
Sélectionner :Utilisé pour récupérer les données d'une base de données à restituer sous forme de tableau.
Si nous voulions récupérer tous les noms des étudiants qui se trouvent dans la maison Gryffondor, nous utiliserions le SELECT commande. L'exemple ci-dessous interroge la table des étudiants pour le prénom et le nom de chaque étudiant dans la base de données, qui pour nous ne sont que les cinq lignes décrites ci-dessus.
- Syntaxe
SELECT column1, column2, ...
FROM table_name;
- Exemple
SELECT first_name, last_name FROM Students;
prénom | nom_de_famille |
---|---|
Harry | Potter |
Hermione | Granger |
Ron | Weasley |
Draco | Malefoy |
Cédric | Diggory |
Alternativement, si nous voulons sélectionner tous les champs du tableau, notre commande utilisera la syntaxe "*", ce qui signifie sélectionner tous les champs :
SELECT * FROM Students;
prénom | nom_de_famille | se connecter | âge | gpa | maison |
---|---|---|---|---|---|
Harry | Potter | legarçonqui a survécu | 15 | 4 | Gryffondor |
Hermione | Granger | granger2 | 15 | 4.5 | Gryffondor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffondor |
Draco | Malefoy | malfoy999 | 15 | 4 | Serpentard |
Cédric | Diggory | diggory123 | 15 | 4 | Poufsouffle |
Clauses
Une clause est un morceau logique d'une instruction SQL, et c'est (en théorie) un champ facultatif.
Dans la déclaration ci-dessus, nous avons simplement renvoyé tous les champs de la base de données Student. Nous n'avons pas spécifié de condition sur les valeurs renvoyées.
Et si on voulait interroger non pas tous les élèves, mais seulement ceux dont la maison est Gryffondor ? Qu'en est-il d'interroger les étudiants dont le prénom commence par "H", ou les étudiants de Poufsouffle et de Serpentard ? Ces cas plus complexes sont résolus par des clauses SQL.
Vous trouverez ci-dessous un aperçu des clauses les plus courantes, mais il existe plusieurs autres clauses dans le langage SQL. Voici un bon aperçu général si vous voulez plus d'informations.
Exemples de clauses
Où : Utilisé pour indiquer une condition lors de la récupération de données à partir d'une base de données. Pour en revenir à l'exemple avec Select, nous devrions utiliser WHERE afin de spécifier la maison comme Gryffondor.
- Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- Exemple
SELECT * FROM Students
WHERE house='Gryffindor';
prénom | nom_de_famille | se connecter | âge | gpa | maison |
---|---|---|---|---|---|
Harry | Potter | legarçonqui a survécu | 15 | 4 | Gryffondor |
Hermione | Granger | granger2 | 15 | 4.5 | Gryffondor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffondor |
Et Utilisé pour combiner plusieurs clauses dans une instruction SQL, où toutes les conditions séparées par AND sont vraies. Nous utiliserions AND pour obtenir les étudiants de Gryffondor qui ont un GPA supérieur à 3,8.
- Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
- Exemple
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
prénom | nom_de_famille | se connecter | âge | gpa | maison |
---|---|---|---|---|---|
Harry | Potter | legarçonqui a survécu | 15 | 4 | Gryffondor |
Hermione | Granger | granger2 | 15 | 4.5 | Gryffondor |
Ou :Semblable à AND, mais ne renvoie que des données dans lesquelles une seule des conditions séparées par OR est vraie. Si nous voulions récupérer des étudiants à Poufsouffle et à Serpentard, mais pas les deux, nous utiliserions la commande OR.
- Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
- Exemple
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
prénom | nom_de_famille | se connecter | âge | gpa | maison |
---|---|---|---|---|---|
Draco | Malefoy | malfoy999 | 15 | 4 | Serpentard |
Cédric | Diggory | diggory123 | 15 | 4 | Poufsouffle |
J'aime : Utilisé avec WHERE pour rechercher un modèle spécifique. Si nous ne voulions que le prénom et le nom des sorciers/sorcières dont les noms commencent par "H", nous pourrions utiliser la commande Like.
- Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
- Exemple
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
prénom | nom_de_famille |
---|---|
Harry | Potter |
Hermione | Granger |
Compter : Utilisé pour trouver le nombre d'une colonne (ou colonnes) dans une table.
- Syntaxe
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
- Exemple
SELECT COUNT(first_name) FROM Students;
COUNT(first_name) |
---|
5 |
Deux autres commandes qui utilisent la même syntaxe sont AVG et SUM. AVG calculera la moyenne de toutes les valeurs et sum calculera la somme de toutes les valeurs.
Sélectionner la limite : Utilisé pour limiter les réponses à un montant spécifié. La façon dont les meilleures réponses sont choisies est dans l'ordre chronologique de leur première insertion dans la base de données.
- Syntaxe
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
- Exemple
SELECT * FROM Students LIMIT 3;
prénom | nom_de_famille | se connecter | âge | gpa | maison |
---|---|---|---|---|---|
Harry | Potter | legarçonqui a survécu | 15 | 4 | Gryffondor |
Hermione | Granger | granger2 | 15 | 4.5 | Gryffondor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffondor |
Autres commandes utiles
Trier par : Trie les résultats par ordre croissant ou décroissant.
- Syntaxe
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
- Exemple
SELECT * FROM Students ORDER BY first_name;
prénom | nom_de_famille | se connecter | âge | gpa | maison |
---|---|---|---|---|---|
Cédric | Diggory | diggory123 | 15 | 4 | Poufsouffle |
Draco | Malefoy | malfoy999 | 15 | 4 | Serpentard |
Harry | Potter | legarçonqui a survécu | 15 | 4 | Gryffondor |
Hermione | Granger | granger2 | 15 | 4.5 | Gryffondor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffondor |
Grouper par : Regroupe les catégories qui ont les mêmes valeurs en lignes. Si vous vouliez connaître le nombre d'élèves dans chaque maison (3 à Gryffondor par exemple), vous pouvez utiliser la commande Regrouper par.
- Syntaxe
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
- Exemple
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT(first_name) | maison |
---|---|
3 | Gryffondor |
1 | Poufsouffle |
1 | Serpentard |
Enfin, voici un DB Fiddle qui montre toutes les commandes ci-dessus en action !
Bases de données normalisées vs dénormalisées
Lors de la conception d'une base de données, vous pouvez suivre deux modèles de conception principaux, chacun avec ses propres compromis.
Normalisé : Optimise pour minimiser la redondance, pas pour le temps de lecture.
Disons que nous avons une table de cours qui a un ID d'enseignant pour l'enseignant qui enseigne ce cours. Nous avons également une base de données d'enseignants qui contient le nom de l'enseignant.
Lorsque nous voulons obtenir les noms des enseignants enseignant un cours particulier, nous devrons interroger à la fois les tables Courses et Teachers car la table des cours ne contient pas le nom de l'enseignant (efficace mais redondant).
Dénormalisé : Optimise le temps de lecture , pas pour minimiser la redondance.
Disons que nous avons une table de cours qui a un ID d'enseignant ET un nom d'enseignant. Nous avons une base de données d'enseignants qui contient également le nom de l'enseignant. Lorsque nous voulons obtenir les noms des enseignants du cours, nous pouvons simplement utiliser le tableau des cours (redondant mais efficace).
Intégrité des données
Il est vital pour les utilisateurs que les données avec lesquelles ils interagissent soient sécurisées, correctes et sensibles. Par exemple, assurez-vous que l'âge n'est pas un nombre négatif ou que deux élèves ne disposent pas des mêmes informations. Nous appelons cela l'intégrité des données.
L'intégrité des données prend plusieurs formes et peut être divisée en quatre catégories :
- Intégrité de l'entité :aucune ligne en double n'existe dans une table. Par exemple, nous ne pouvons pas insérer Ron Weasley deux fois dans la base de données.
- Intégrité du domaine :Restreindre le type de valeurs que l'on peut insérer afin d'imposer des valeurs correctes. Par exemple, une maison ne peut être que Gryffondor, Serdaigle, Serpentard ou Poufsouffle.
- Intégrité référentielle :Les enregistrements qui sont utilisés par d'autres enregistrements ne peuvent pas être supprimés. Un enseignant ne peut pas être supprimé s'il enseigne actuellement un cours.
- Intégrité définie par l'utilisateur : Une catégorie "autre" qui comprend la logique et les règles liées à l'entreprise pour la base de données.
Bases de données SQL communes
- Oracle :Très stable et mature mais peut être coûteux
- MySQL :Léger et rapide à configurer, mais pas aussi mature qu'Oracle
- PostgreSQL :Bon pour certains cas d'utilisation mais pas super rapide
Ressources
- SWEPrep - Questions d'entretien directement dans votre boîte de réception
- SQL et bases de données de freeCodeCamp
- Nettoyer le code
- Java efficace
- Documentation Oracle
- Documentation MySQL
- Documentation PostgreSQL
Rester à jour
- Fils Reddit :Excellentes discussions sur les bases de données, SQL et les nouvelles technologies
- Actualités sur les pirates : Vraiment une excellente ressource pour rester au courant des derniers développements dans l'industrie technologique
- CodePen : Une excellente ressource pour découvrir les bonnes pratiques SQL.