tp1

2025-09-28 09:01:01 +02:00
parent 120d3ff65c
commit a1ef7aaca5
5 changed files with 210 additions and 75 deletions

18
bdd.md

@@ -5,16 +5,16 @@
Les thèmes recommandés à développer pour atteindre les acquis d'apprentissage visés sont :
- Bases de données :
- Introduction aux bases de données relationnelles ;
- Tables, schémas relationnels ;
- Requêtes SQL de base ;
- Base de données noSQL.
- [X] Introduction aux bases de données relationnelles ;
- [X] Tables, schémas relationnels ;
- [X] Requêtes SQL de base ;
- [ ] Base de données noSQL.
- Introduction à l'IoT :
- Architectures IoT (Extreme edge/edge/mist/fog/cloud, passerelle) ;
- Communication indirecte orientée message (Publier/Souscrire, broker, MQTT) ;
- Gestion de la qualité de service (QoS) ;
- Notions d'API (déclaration, appel de services) ;
- Tableau de bord (node-red, grafana...).
- [ ] Architectures IoT (Extreme edge/edge/mist/fog/cloud, passerelle) ;
- [ ] Communication indirecte orientée message (Publier/Souscrire, broker, MQTT) ;
- [ ] Gestion de la qualité de service (QoS) ;
- [ ] Notions d'API (déclaration, appel de services) ;
- [ ] Tableau de bord (node-red, grafana...).
### Volume horaire

@@ -5,3 +5,59 @@ OFFSET 0 revient à omettre la clause OFFSET, tout comme OFFSET avec un argument
L'optimiseur de requêtes prend en compte LIMIT lors de la génération des plans de requête, vous obtiendrez donc très probablement différents plans (générant différents ordres de lignes) en fonction de ce que vous donnez pour LIMIT et OFFSET. Ainsi, l'utilisation de différentes valeurs LIMIT/OFFSET pour sélectionner différents sous-ensembles d'un résultat de requête donnera des résultats incohérents à moins que vous n'appliquiez un classement prévisible des résultats avec ORDER BY. Ce n'est pas un bug; c'est une conséquence inhérente du fait que SQL ne promet pas de fournir les résultats d'une requête dans un ordre particulier à moins que ORDER BY ne soit utilisé pour contraindre l'ordre.
Les lignes ignorées par une clause OFFSET doivent toujours être calculées à l'intérieur du serveur ; par conséquent, un OFFSET important pourrait être inefficace.
### Exercice 3. système de maintenance
Une société possède un parc de machine. Ces machines sont placés dans des ateliers et les ateliers appartiennent à des sites (lieux) de fabrication.
Une machine est caractérisée par sa marque et sa date d'achat.
Les opérations de maintenance sont des cycles d'opérations à effectuer régulièrement sur une machine.
Des opérateurs conduisent ces opérations et notent les résultats.
___
### Exercice 4. ERP (Enterprise resource planning)
Uns société achète des articles pour fabriquer des produits finis.
Un entrepôt permet de stocker à la fois les articles et les produits finis.
Les produits finis sont créés à partir des articles suivant une gamme de fabrication.
*****
Articles Produits Finis Gamme de fabrication Production Stockage
Nom Nom Nom Article Produit Fini Article
Prix d'achat Prix vente Nom Produit Fini Quantite Produit f
Quantité Date
******
Produit Gamme de fabrication Production Stockage
Nom Produit Produit Produit
Prix Produit Quantité Quantité
fini (o/n) Quantité Date
Activer les contraintes dans SQLite
PRAGMA foreign_keys = ON;
vous ne pouvez pas ajouter directement une contrainte de clé primaire à une table existante dans SQLite après sa création. Contrairement à certaines autres bases de données relationnelles, SQLite ne permet pas de modifier une table pour ajouter ou supprimer des contraintes de clé primaire après que la table a été créée.
- 1. Créez la nouvelle table avec la contrainte de clé primaire
CREATE TABLE new_table (
id INTEGER PRIMARY KEY,
column1 TEXT,
column2 INTEGER
);
-- 2. Copiez les données de l'ancienne table vers la nouvelle
INSERT INTO new_table (id, column1, column2)
SELECT id, column1, column2 FROM old_table;
-- 3. Supprimez l'ancienne table
DROP TABLE old_table;
-- 4. Renommez la nouvelle table avec le nom de l'ancienne table
ALTER TABLE new_table RENAME TO old_table;

179
td1.md

@@ -70,56 +70,139 @@ Amélioration 2 : Suvant l'age et le permis des visites médicales périodiques
___
### Exercice 3. système de maintenance
Une société possède un parc de machine. Ces machines sont placés dans des ateliers et les ateliers appartiennent à des sites (lieux) de fabrication.
Une machine est caractérisée par sa marque et sa date d'achat.
Les opérations de maintenance sont des cycles d'opérations à effectuer régulièrement sur une machine.
Des opérateurs conduisent ces opérations et notent les résultats.
___
### Exercice 4. ERP (Enterprise resource planning)
Uns société achète des articles pour fabriquer des produits finis.
Un entrepôt permet de stocker à la fois les articles et les produits finis.
Les produits finis sont créés à partir des articles suivant une gamme de fabrication.
*****
Articles Produits Finis Gamme de fabrication Production Stockage
Nom Nom Nom Article Produit Fini Article
Prix d'achat Prix vente Nom Produit Fini Quantite Produit f
Quantité Date
******
Produit Gamme de fabrication Production Stockage
Nom Produit Produit Produit
Prix Produit Quantité Quantité
fini (o/n) Quantité Date
Activer les contraintes dans SQLite
PRAGMA foreign_keys = ON;
vous ne pouvez pas ajouter directement une contrainte de clé primaire à une table existante dans SQLite après sa création. Contrairement à certaines autres bases de données relationnelles, SQLite ne permet pas de modifier une table pour ajouter ou supprimer des contraintes de clé primaire après que la table a été créée.
- 1. Créez la nouvelle table avec la contrainte de clé primaire
CREATE TABLE new_table (
id INTEGER PRIMARY KEY,
column1 TEXT,
column2 INTEGER
```sql
create table entrepot (
id integer primary key,
ville text
);
-- 2. Copiez les données de l'ancienne table vers la nouvelle
INSERT INTO new_table (id, column1, column2)
SELECT id, column1, column2 FROM old_table;
create table societe (
id integer primary key,
nom text
);
-- 3. Supprimez l'ancienne table
DROP TABLE old_table;
create table chauffeur (
id integer primary key,
nom text
);
-- 4. Renommez la nouvelle table avec le nom de l'ancienne table
ALTER TABLE new_table RENAME TO old_table;
create table camion (
immatriculation text primary key,
marque text,
permis text,
foreign key (permis) references permis(categorie)
);
create table permis (
categorie text primary key,
poids numeric
);
create table transport (
id integer primary key,
jour text,
depart integer,
arrivee integer,
chauffeur integer,
camion text,
foreign key (depart) references entrepot(id),
foreign key (arrivee) references entrepot(id),
foreign key (chauffeur) references chauffeur(id),
foreign key (camion) references camion(immatriculation),
check (arrivee <> depart)
);
```
## Insertion des données
Je ne spécifie pas les colonnes. Je dois mettre toutes les valeurs dans l'ordre des colonnes
```sql
insert into societe values (1, 'UPS');
```
Je spécifie uniquement la colonne nom. la colonne id qui est integer primary key est automatiquement incrémentée : 1, 2, 3, ...
```sql
insert into chauffeur (nom) values ('Albert');
```
Insérer 2 lignes en une seule requête
```sql
insert into chauffeur (nom) values
('Samia'),
('Samy');
```
Supprimer un enregistrement
```sql
delete from chauffeur where id = 5;
```
```sql
insert into permis (categorie, poids) values
('B', 3.5),
('C', 32),
('CE', 44);
insert into entrepot values
(1, 'Saint Dié'),
(2, 'Paris'),
(3, 'Lyon'),
(4, 'Marseille');
insert into camion (immatriculation, marque) values
('AA123BB', 'Volvo'),
('ZZ342VD', 'Renault'),
('SP457MP', 'Mercedes'),
('XQ876YE', 'Volvo');
-- modification de table
-- ajouter une colonne pour le permis
alter table camion
add column permis text;
update camion set permis = 'B'
where immatriculation = 'ZZ342VD';
update camion set permis = 'C'
where immatriculation = 'SP457MP';
update camion set permis = 'CE'
where immatriculation = 'AA123BB';
update camion set permis = 'CE'
where immatriculation = 'XQ876YE';
-- 1 = Saint Dié
-- 3 = Lyon
-- 2 = Samia
insert into transport (id, jour, depart, arrivee,
chauffeur, camion)
values (1, '2025-09-19', 1, 3, 2, 'SP457MP')
insert into transport (id, jour, depart, arrivee,
chauffeur, camion)
values (50, '2030-09-19', 100, 30, 20, 'XXXXXXX')
drop table camion ;
```
### Activer le contrôle des liens
```sql
pragma foreign_keys = ON;
insert into camion (immatriculation, marque, permis)
values ('DF244JG', 'Mercedes', 'Z');
```
### Supprimer une table
```sql
drop table transport ;
```

@@ -1,9 +1,3 @@
select count(*) from customers;
select count(*) from albums;
select count(*) from artists;
select distinct country from customers;
select country, count(*) from customers group by Country order by count(*) desc;

8
tp2.md

@@ -59,7 +59,8 @@ select firstName || ' ' || lastName as nomComplet
> [!WARNING]
> Le respect des majuscules n'est pas obligatoire pour le nom des tables et colonnes mais cela l'est pour les valeurs *brazil* est différent de *Brazil*.
> Le respect des majuscules n'est pas obligatoire pour le nom des tables et colonnes mais cela l'est pour les valeurs.<br>
*brazil* est différent de *Brazil*.
- Filtrer les clients dont l'age est inférerieur à 25 ans et qui vivent aux USA
@@ -76,7 +77,8 @@ Ici aussi il faut respecter les majuscules pour la valeur *USA*.
- Filter les albums qui sont sortis entre 1984 et 1989
```sql
select Title, Year from albums
select Title, Year
from albums
where Year between 1984 and 1989
```
@@ -176,7 +178,7 @@ Pour afficher un top il suffit de trier par ordre décroissant `DESC` et de limi
```sql
SELECT Name, Milliseconds FROM tracks
order by Milliseconds DESC
LIMIT 10;
limit 10;
```
- Afficher les 5 factures les plus importantes par montant total.