• Aucun résultat trouvé

Base de données. Par extension on nomme schéma d'une base de donnée l'ensemble des schémas de relation qui constitue la base.

N/A
N/A
Protected

Academic year: 2022

Partager "Base de données. Par extension on nomme schéma d'une base de donnée l'ensemble des schémas de relation qui constitue la base."

Copied!
6
0
0

Texte intégral

(1)

Objectifs

Identifier les concepts définissant le modèle relationnel.

Savoir distinguer la structure d’une base de données de son contenu.

Repérer des anomalies dans le schéma d’une base de données.

1. Introduction

Nous sommes bientôt à la fin du trimestre… Vous n'avez pas connu le temps où les enseignants calculaient les moyennes, les reportaient sur le bulletin (liasse carbonée) avant d'y écrire une appréciation. L'administration avait au préalable porté les informations personnelles et celles de la vie scolaire. Le président du conseil de classe écrivait en séance l'appréciation générale et signait. Un feuillet était destiné au dossier élève, un autre aux parents le dernier aux archives de l'établissement…

La technique (numérique) a progressivement remplacé le papier. Davantage d'informations sont stockées et accessibles, sur votre cursus mais également sur votre personne. Pour autant tout ne s'y trouve pas…

Un système d'information qu'il soit humain ou technique reflète des choix. C'est une modélisation de la réalité.

La gestion des informations comporte de nombreux enjeux :

• La sauvegarde des données

• Leur maintien à jour

• Des droits d'accès différents

• Protection contre les erreurs (marquage concurrent des absences)

2. Le modèle relationnel

2.1 Travail de recherche

1. Choisissez un des domaines suivant et faites un inventaire sous forme de dictionnaire des données que vous souhaitez voir gérer par votre système d'information.

(Garage automobile , EDT d'un établissement scolaire, Vidéothèque...) 2. Éliminer les infos superflues et celles qui se calculent à partir d'autres données Si vous mettez trop d'infos (attributs) ce sera difficile pour un premier jet.

Exemple pour l'EDT :

• nombre de chaises (d'une salle)

• couleur des cheveux du professeur

• nom d'une matière

• début (heure) d'un cours

• durée d'un cours

• fin (heure) du cours

• nom d'une salle

3. Essayer d'organiser vos données en établissant des relations de dépendance entre les attributs.

C'est pas si simple…

Ces relations entre les attributs permettent de définir des entités.

Dans l'exemple ci-contre chaque salle est représentée par un quadruplet : ('D401', 4, 0, 'atelier SI')

('D402' ,19 , 13, 'labo SI NSI') ('D403', 21, 13, 'labo SI NSI')

La relation salle est l'ensemble de ces entités :

salle = {('D401', 4, 0, 'atelier SI'), ('D402' ,19 , 13, 'labo SI NSI'), ('D403', 21, 13, 'labo SI NSI')}

D'une manière générale une relation est définie par un schéma  : salle = {'nom_salle', nbre_tables, nbre_pc, 'vocation'}

D'autres relations pourront définir les classes d'élèves, les professeurs etc.

4. Essayer d'écrire les schémas des relations de votre système d'information.

2.2 Modélisation

Une base de données est un ensemble de relations.

Dans l'exemple précédent nous avons vu la relation salle.

Chaque relation est définie selon un schéma composé des attributs de la relation.

Le schéma de relation salle est : salle = {'nom_salle', nbre_tables, nbre_pc, 'vocation'}

Chaque attribut a un domaine de définition : nom_salle est une chaîne de caractères nbre_tables est un entier

Par extension on nomme schéma d'une base de donnée l'ensemble des schémas de relation qui constitue la base.

LML dataBase.odt 1/6 02/10/20

nom salle

nbre tables nbre PC

vocation salle

(2)

2.3 Contraintes d'intégrité.

Il est nécessaire de s'imposer ces contraintes pour préserver la cohérence du système d'information.

a) Contrainte de domaine

Il faut choisir pour chaque attribut le domaine le plus approprié pour représenter l'information.

Dans l'exemple précédent, l'attribut vocation_salle n'a d'autre utilité que l'information. Le type CHAR semble le plus approprié. Par contre on pourrait ajouter au schéma un attribut tp_possible indiquant si on peut faire des TP dans la salle. Le type CHAR sera peu adapté si on veut faire une sélection ou recherche, le type BOOLEAN conviendra mieux. On aurait alors la relation :

salle = {'nom_salle' : CHAR20, nbre_tables : INTEGER, nbre_pc : INTEGER, 'vocation' : CHAR 20, tp_possible : BOOLEAN}

b) Contrainte d'entité

Chaque élément d'une relation doit être unique. Il doit également être associé à une entité sans ambiguïté. Pour cela on choisira un attribut (dans certains cas plusieurs) dans le schéma pour identifier chaque élément de manière unique. Souvent un entier plus aisé à traiter qu’une chaîne de caractère. Cet attribut sera la clé primaire de la relation. En pratique on sera souvent amener à créer cet attribut de type entier sans autre objectif que servir de clé primaire à la relation.

Exemple :

Pour la relation classe l'attribut nom_salle identifie de manière unique la salle mais il est de type String. On préférera ajouter un attribut id_salle de type Int non représentatif pour les humains mais facile à gérer par le système.

c) Contrainte de référence

Les clés primaires pourront également servir pour établir des relations entre entités… nous verrons cela plus tard.

2.4 Exercices

a) Annuaire téléphonique

On souhaite modéliser un annuaire téléphonique simple dans lequel chaque personne (identifiée par son nom et son prénom) est associée à son numéro de téléphone. Proposer une modélisation relationnelle de cet annuaire.

b) Bulletin scolaire

Donner la modélisation relationnelle d'un bulletin scolaire. On doit y trouver les informations suivantes :

• des élèves possédant un numéro d'élève unique.

• des disciplines

• au plus une note sur 20 par discipline et par élève c) Réseau de bus

Proposer une modélisation pour un réseau de bus. Elle doit permettre de générer, pour chaque arrêt de bus du réseau, une fiche horaire avec tous les horaires de passage de pour toutes les lignes qui desservent l'arrêt.

Il faudra dans un premier temps faire l'inventaire des informations pertinentes et comment les représenter. On pourra alors procéder à la modélisation sous forme de relation.

3. Les bases de données relationnelles

Le modèle relationnel est purement théorique. Il a permis d'établir les relations de notre système d'information. Pour l'appliquer nous allons utiliser un langage qui permettra de définir les relations (tables) et de manipuler les données.

3.1 Modèle conceptuel et logique des données

Il permet de créer les tables en spécifiant leur nom, leurs attributs, les types de ces derniers et les contraintes.

Application : on considère le modèle de conceptuel de données de la base de prêt à porter

On retrouve les entités qui décrivent nos relations

Travail préliminaire

• Compléter le modèle en surlignant sur chaque table la clé primaire qui garantie la contrainte d'entité.

• Sur chaque associations, préciser la cardinalité qui indique le nombre d'entités possible, ;0, 1 ou *

• Ajouter sur les associations les attributs qui vous semblent utiles

Remarque : Dans ce modèle on retrouve les relations (entités) avec leurs attributs et également les relations (associations) qui ont leur propres attibuts et qui comportent également les clés des entités qu'elles relient, ce qui traduit l'association.

modèle conceptuel des données

(3)

On peut donc établir un modèle logique de notre base de donnée.

Des changements sont apparus :

• les données d'adresse ont été regroupés en une seule table.

• Certaines associations ont donné de nouvelles tables (relations) : vente, appro

• Enfin les tables partagent des attributs, souvent des clés qui permettent d'établir un lien entre les entités.

• Exemple : à partir d'un article je pourrai obtenir le nom du motif qui se trouve dans la table tissu

→ Identifier les clés étrangères dans les tables

4. Le langage SQL

C'est aujourd'hui le langage standard de manipulation des bases de données.

Apparu en 1975 par Chamberlin sur les travaux de Childs et de Codds, le SQL s'est imposé dans les années 80 avec les systèmes de gestion de bases de données relationnelles. Non détrôné à ce jour.

C'est avant tout un langage de définition des données : 4.1 création des tables

L'instruction CREATE permet de créer les tables, les attributs, les domaines de définition et spécifier les clés primaires et étrangères :

CREATE TABLE `modele` (

`id_modele` INTEGER PRIMARY KEY,

`prix_achat` REAL,

`prix_vente` REAL,

`nom_modele` TEXT);

Application

Nous utilisons le système de gestion de base SQLite avec une application DB Browser.

1. Créer une nouvelle base de donnée > pap.

2. Utiliser les commandes graphiques pour créer la table > tissu.

Créer les attributs, dans leur domaine de définition et définir la clé primaire.

3. Utiliser la syntaxe SQL pour créer les autres tables conformément au MLD ci-dessus (identifier les clés primaires et étrangères).

Les types courants en SQL

Type Description

INTEGER Entier 32 bits signé

REAL Flottant 32 bits

DECIMAL(t, f) Decimal avec t chiffres dont f après la virgule

VARCHAR(n) Chaîne d’au plus n caractères

CHAR(n) Chaîne de n caractères (espace vide pour compléter)

TEXT Chaîne de taille quelconque

BOOLEAN Alternative CHAR(1) et ‘V’ ou ‘F’

DATE Date au format ‘AAAA-MM-JJ’

TIMESTAMP Un instant au format ‘AAAA-MM-JJ – hh:mm:ss’

NULL Attention avec les contraintes d’intégrité

LML dataBase.odt 3/6 02/10/20

(4)

4.2 Spécification des contraintes a) Contraintes d’intégrité

Clés primaires : Nous avons vu au-dessus comment définir les clés primaires avec la syntaxe PRIMARY KEY. A noter la possibilité d’ajouter une incrémentation automatique pour les clés entières.

Clés étrangères : on utilise le mot clé REFERENCES suivi du nom de l’attribut dans la table où se trouve la référence.

FOREIGN KEY(`id_tissu`) REFERENCES `tissu`(`id`);

b) Contraintes utilisateur

IL est également possible d’imposer un format des données pour un attribut avec la syntaxe CHECK : CHECK (prix_vente >= 0);

Le type NULL sera utile également pour éviter des champs vides qte INT NOT NULL

Application

Terminer la définition de la base :

tables

clés

• contraintes.

Une fois terminée exporter > Fichier.Export votre base au format SQL en précisant votre nom (pap.nom.sql).

4.3 Suppression

DROP TABLE nom_table

Attention cette instruction supprime également les données.

A noter que vous ne pourrez pas supprimer des tables si elles ont liés à d’autres par des contraintes d’intégrité :) 4.4 Écriture des données dans la base

En pratique cette étape se fera par le biais d’une application qui génère le code SQL à partir d’une IHM ou également à partir de fichier contenant les données (CSV, JSON, XML).

Néanmoins le faire manuellement est une bonne façon d’apprendre.

INSERT INTO modele VALUES (110, ‘short’, 7.50, 23.99);

on peut également préciser l’ordre des attributs.

INSERT INTO modele (nom, id, prix_vente, prix_vente) VALUES (‘short’, 110, 23.99, 7.50);

La vérification des contraintes se fait au moment de l’insertion des données, c’est donc là que le système lèvera des erreurs.

Application

Vous allez créer :

3 tissus

• 4 modeles

• 15 articles

• 2 fournisseurs

• 3 clients avec leur adresse

• 3 appros

4 ventes

Organisez vous en binôme. La tache sera effectuée à partir d’un script SQL.

Bien sur vous pouvez essayer de faire le travail en utilisant Python et la library sqlite3. Quelques exemples simple s ici Cela prendra un peu de temps, mais s’avérera plus rapide si vous voulez insérer beaucoup de données.

...

(5)

5. L’exploitation des données en SQL

En travaillant sur le stockage des données, Childs affirme que l'on peut exprimer toute question avec seulement 3 fonctions de base : la "sélection", la "relation", le "regroupement".

La relation est établie. Reste la sélection et le regroupement.

5.1 Les requêtes de sélection SELECT FROM et WHERE

Votre BD de prêt à porter est crée et les données inserées. Vous pouvez visualiser celles-ci avec l’appli DB Browser…

cependant l’intérêt d’une base donnée relationnelle est dans l’extraction sélective des données que l’on peut en faire.

Je peux par exemple rechercher les modèles et leur prix de vente pour lesquels le prix achat est supérieur à 10.

SELECT nom_modele, prix_vente FROM modele WHERE prix_achat > 10

On pourrait également afficher tous les attributs de la table modèle dont le prix d’achat est < 20 SELECT * FROM modele WHERE prix_vente < 20;

On peux également donner des alias aux attributs :

SELECT nom_modele AS vetement FROM modele

5.2 Clauses COUNT, ORDER BY, DISTINCT

La clause COUNT permet d’affiche le nombre de résultats

SELECT COUNT (prix_vente) AS total FROM modele WHERE prix_vente > 10;

La clause ORDER BY permet de trier sur les valeurs d’un attribut

SELECT modele.nom_modele, modele.prix_vente FROM modele ORDER BY modele.prix_achat ASC Remarquez que l’on peut utiliser la notation table.attribut pour lever les ambiguïtés de nommage.

La clause DISTINCT permet de ramener seulement les valeurs distinctes d’une requête.

SELECT taille FROM article SELECT DISTINCT taille FROM article

5.3 La jointure : JOIN

La relation vente associe les relations article et client. Par elle je peux connaître toutes les ventes enregistrées

SELECT * FROM vente

Mais ce n’est pas très parlant…

Essayons de faire mieux :

LML dataBase.odt 5/6 02/10/20

(6)

SELECT * FROM vente

JOIN client ON vente.client = client.id_client La jointure se fait ici sur les clé primaire et étrangère qui définissent l’association des deux relations.

On peut bien sur choisir les attribut à afficher.

SELECT client.nom_client, vente.qte FROM vente

JOIN client ON vente.client = client.id_client

On peut bien sur ajouter les autres clauses avec les jointures.

5.4 Exercices

Une « vue » est la table que ramène une requête SQL sur la base.

Écrire le code SQL qui permet de créer les vues suivantes.

1. Nom des tous les modèles avec leur prix de vente 2. Le nombre d’articles avec le tissu « hibiscus » 3. Les tailles de tous les tshirts restant en stock.

4. Dans quelles villes ont été vendus des shorts (nom_modele)

5. Combien d’articles ont été vendus par le fournisseur (nom_fournisseur) 6. Afficher tous les couleurs de tissus des articles de taille S

7. Lister les articles, leur modele, nom de tissu, taille et qté en stock.

Références

Documents relatifs

brouillon (par exemple du type de ceux contenus dans les normes) sont tout à fait indiqués pour décrire avec précision et efficacité les spécifications GPS.. Trop de

Type Route Carrefour Nœud SNCF Ligne SNCF Section hydro Nœudhydro Conduite Etablissement Limite administrative. NIVEAU NATIONAL

Exprimer le nombre d’entités avec lesquelles une entité peut être en association via un ensemble d’associations. Cas particulier des associations binaires (e.g., entre

On traite la parenthèse

Vous trouverez l''''intégralité des informations et des données dans la documentation pour l''utilisateur

Bruno Deschamps, Georges Grekos, Equipe de th´ eorie des nombres, Fac- ult´ e des sciences et techniques, Universit´ e Jean Monnet, 23 rue du docteur Paul Michelon, 42023

‚ Par exemple : le nom d’un livre et de ses auteurs ñ Inutile de faire plusieurs requêtes. ñ Sélection sur

‚ Par exemple : le nom d’un livre et de ses auteurs ñ Inutile de faire plusieurs requêtes. ñ Sélection sur