Offre une représentation visuelle de la structure d'une base de données
Tables
Colonnes
Type de donnée
Attributs(Auto-incrément, Non null, Unicité)
Valeur par défaut
On vise à protéger l'intégrité des données via la définition explicite des caractéristiques de l'information stockée
Précise, Complète, Cohérente
classDiagram
direction RL
class Enseignants {
numero_employe int ai
nom varchar[200] nn
courriel varchar[200] un
}
class Cours {
sigle char[10] nn un
credits double[2,1] nn = 1
nom varchar[200] nn
description varchar[1000]
}
class Groupes {
numero tinyint[3] nn
session char[5] nn
}
class Etudiants {
numero_da char[7] nn un
nom varchar[200] nn
}
Cours --> Enseignants
Groupes --> Cours
Groupes --> Etudiants
Quelles caractéristiques peut-on identifier sur ce modèle de données?
Quelques bonne pratiques à garder en tête lors de la rédaction de code SQL
Standardiser les mots-clés en MAJUSCULE vs minuscule
Nom des tables au pluriel
Nom des colonnes en lower_snake_case
Utiliser la forme explicite des commandes
Exemple de guide de style
Pour rappel,
1 instance de MariaDB
Héberge plusieurs base de données
1 BD peut contenir plusieurs tables
block-beta
block:container
columns 3
space:1
SGBD["Instance"]
space:1
block:bda:1
columns 2
atitle["Blog"]
space:1
users
posts
...
end
block:bdb:1
columns 2
btitle["Store"]
space:1
clients
products
orders
invoices
end
block:bdc:1
columns 2
ctitle["School"]
space:1
teachers
students
courses
groups
end
space:1
more["..."]
space:1
end
style container fill:aliceblue;
style more fill:none,stroke:none;
style SGBD color:blue;
classDef title fill:none,stroke:none
class SGBD,atitle,btitle,ctitle title
create [ or replace ] database [ if not exists ] school ; drop database [ if exists ] school ; -- ATTENTION -- La manipulation des base de données de supprime pas les GRANTS associés...
Il faudra donc préciser la BD à utiliser pour les commandes SQL subséquentes
use db_name ; -- ou individuellement pour chaque commande select * from db_name . my_table ;
CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] table_name ( column_name data_type [ column_attributes ], other_colum_name data_type [ column_attributes ] ); data_type : https : // mariadb . com / kb / en / data - types / column_attributes : [ NOT NULL ] [ AUTO_INCREMENT KEY ] [ UNIQUE ] [ DEFAULT default_value ]
📚 Documentation
DATATYPES
et
CREATE TABLE
Une fois une base de données en fonction, on veut préserver l'information, tout en étant capable de la faire évoluer selon les besoins.
📚 ALTER TABLE
create table teachers ( employee_number int auto_increment key , name varchar ( 200 ) not null , email varchar ( 200 ) unique not null ); create table courses ( code char ( 10 ) not null unique , credits double ( 2 , 1 ) not null default 1 , name varchar ( 200 ) not null , description varchar ( 1000 ) );
-- Voir les tables d'une BD show tables [ from db_name ]; -- Voir la structure d'une table describe table_name ; -- Voir la requête de création d'une table show create table table_name ; -- Supprimer une table -- Attention, supprimer une table n'efface pas les privilèges associés drop table [ if exists ] table_name [, table_name ...]; -- Reinitialiser une table (DROP + CREATE) truncate table table_name ;
INSERT INTO table_name [( column_name , ...)] VALUES ({ expr | DEFAULT }, ...), (...), ...
INSERT
Pour insérer des données, on fait correspondre une valeur à chacune des colonnes de la table, dans le même ordre qu'elles sont définies dans la table.
On peut également préciser un sous-ensemble des colonnes et associer une valeur seulement pour ces dernières. Les colonnes ignorées doivent avoir une valeur par défaut/auto_increment.
insert into teachers values ( default , 'nom a' , 'email a' ); -- est equivalent a insert into teachers ( employee_number , name , email ) values ( default , 'nom b' , 'email b' ); -- La colonne AUTO_INCREMENT doit avoir la valeur DEFAULT pour être incrémentée automatiquement -- ou être ignorée insert into teachers ( name , email ) values ( 'nom c' , 'email c' ); -- On peut 'déplacer' la valeur d'AUTO_INCREMENT en saisissant manuellement une valeur insert into teachers values ( 100 , 'nom d' , 'email d' ), ( default , 'nom e' , 'email e' ); -- default sera 101, et ainsi de suite pour les prochains insert
SELECT column_def [, column_def , ...] FROM table_name [ WHERE where_condition ] column_def : Utiliser * pour lister toutes les colonnes , sinon nommer explicitement les colonnes Op é rateur AS permets de renommer une colonne where_condition : Applique un crit è re de s é lection aux lignes à retourner Les op é rateurs logiques disponibles sont IS NULL , IS NOT NULL , > , >= , < , <= , = , <> , && , ||
📚 SELECT
select * from teachers ; select name , email from teachers ; select name as nom , credits as `crédits` from courses ; select * from courses where description is not null ; select * from courses where ( description is not null and description <> '' ) or ( credits > 2 );
block-beta
columns 3
space:1
sources["Requête"]:1
space:1
space:3
block:merged:3
columns 1
mergedtitle["Données"]:1
block:merge1
columns 21
m110[" "]
m111[" "]
m112[" "]
m113[" "]
m114[" "]
m115[" "]
m116[" "]
m117[" "]
m118[" "]
m119[" "]
m120[" "]
m121[" "]
m122[" "]
m123[" "]
m124[" "]
m210[" "]
m211[" "]
m212[" "]
m213[" "]
m214[" "]
m215[" "]
m216[" "]
m217[" "]
m218[" "]
m219[" "]
m220[" "]
m221[" "]
m222[" "]
m223[" "]
m224[" "]
m310[" "]
m311[" "]
m312[" "]
m313[" "]
m314[" "]
m315[" "]
m316[" "]
m317[" "]
m318[" "]
m319[" "]
m320[" "]
m321[" "]
m322[" "]
m323[" "]
m324[" "]
m410[" "]
m411[" "]
m412[" "]
m413[" "]
m414[" "]
m415[" "]
m416[" "]
m417[" "]
m418[" "]
m419[" "]
m420[" "]
m421[" "]
m422[" "]
m423[" "]
m424[" "]
m510[" "]
m511[" "]
m512[" "]
m513[" "]
m514[" "]
m515[" "]
m516[" "]
m517[" "]
m518[" "]
m519[" "]
m520[" "]
m521[" "]
m522[" "]
m523[" "]
m524[" "]
m610[" "]
m611[" "]
m612[" "]
m613[" "]
m614[" "]
m615[" "]
m616[" "]
m617[" "]
m618[" "]
m619[" "]
m620[" "]
m621[" "]
m622[" "]
m623[" "]
m624[" "]
m10[" "]
m11[" "]
m12[" "]
m13[" "]
m14[" "]
m15[" "]
m16[" "]
m17[" "]
m18[" "]
m19[" "]
m20[" "]
m21[" "]
m22[" "]
m23[" "]
m24[" "]
end
end
space:3
block:filtered:3
columns 1
filteredtitle["Filtre"]:1
block:filtered1
columns 21
f110[" "]
f111[" "]
f112[" "]
f113[" "]
f114[" "]
f115[" "]
f116[" "]
f117[" "]
f118[" "]
f119[" "]
f120[" "]
f121[" "]
f122[" "]
f123[" "]
f124[" "]
f210[" "]
f211[" "]
f212[" "]
f213[" "]
f214[" "]
f215[" "]
f216[" "]
f217[" "]
f218[" "]
f219[" "]
f220[" "]
f221[" "]
f222[" "]
f223[" "]
f224[" "]
f310[" "]
f311[" "]
f312[" "]
f313[" "]
f314[" "]
f315[" "]
f316[" "]
f317[" "]
f318[" "]
f319[" "]
f320[" "]
f321[" "]
f410[" "]
f411[" "]
f412[" "]
f413[" "]
f414[" "]
f415[" "]
f416[" "]
f417[" "]
f418[" "]
f419[" "]
f420[" "]
f421[" "]
f510[" "]
f511[" "]
f512[" "]
f513[" "]
f514[" "]
f515[" "]
f516[" "]
f517[" "]
f518[" "]
f519[" "]
f520[" "]
f521[" "]
f610[" "]
f611[" "]
f612[" "]
f613[" "]
f614[" "]
f615[" "]
f616[" "]
f617[" "]
f618[" "]
f619[" "]
f620[" "]
f621[" "]
f622[" "]
f623[" "]
f624[" "]
f625[" "]
f626[" "]
f627[" "]
f10[" "]
f11[" "]
f12[" "]
f13[" "]
f14[" "]
f15[" "]
f16[" "]
f17[" "]
f18[" "]
f19[" "]
f20[" "]
f21[" "]
f22[" "]
f23[" "]
f24[" "]
f25[" "]
f26[" "]
f27[" "]
f28[" "]
f29[" "]
f30[" "]
end
end
class f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30 red
classDef red stroke:red
space:3
block:selected:3
columns 1
selectedtitle["Sélection"]:1
block:selected1
columns 5
s110[" "]
s111[" "]
s112[" "]
s113[" "]
s114[" "]
s115[" "]
s116[" "]
s117[" "]
s118[" "]
s119[" "]
s210[" "]
s211[" "]
s212[" "]
s213[" "]
s214[" "]
s215[" "]
s216[" "]
s217[" "]
s218[" "]
s219[" "]
end
end
sources --"from"--> merged
merged --"where"--> filtered
filtered --"select"--> selected
classDef nobox fill:none,stroke:none,font-size:larger;
class sources,sourcestitle nobox
class merged,mergedtitle nobox
class filtered,filteredtitle nobox
class selected,selectedtitle nobox