coincoins

SQL.LDD (Langage de définistion des Données)


Les requêtes CREATE, ALTER et DROP, la notion de vues

Maintenant on passe à la modification de la structure de la base de données.

Introduction

Le plus simple est de faire les étapes de création de la base de données exemple : gescom (fichier disponible au 1er chapitre).

Remarque la table créée ici est la dernière créée.

RôleSQL
Créer la base, si elle n'existe pas, puis l'utiliser.
CREATE DATABASE IF NOT EXISTS `gescom` ;
USE gescom ;
Créer les tables
(ici une seule : contenir)
Remarquer la clé primaire qui possède deux champs
CREATE TABLE `gc_contenir` (
  `numCde` INT NOT NULL AUTO_INCREMENT,
  `refArt` VARCHAR(15) NOT NULL,
  `qty`    FLOAT DEFAULT 0 NOT NULL,
  PRIMARY KEY(`numCde`, `refArt`)
);
Ajouter deux clés étrangères
On voit ici que si les champs sont dans la clé, la notion de clé de référence (clé étrangères) est totalement indépendante dans la table. Voir dans les chapitres sur la modélisation pour plus d'info.
ALTER TABLE `gc_contenir`
  ADD CONSTRAINT FOREIGN KEY "fk_commande_contenant" 
      (`numCde`) REFERENCES `gc_commande` (`numCde`),
  ADD CONSTRAINT FOREIGN KEY "fk_article_contenu" 
      (`refArt`) REFERENCES `gc_article` (`refArt`);

.

2. Exemples :

Consulter les différents scripts des bases exemples et exercices ... classe inversée oblige !

Supprimer les tables, la base.

On commence toujours par supprimer les tables qui ne sont QUE source de clé étrangère (ici : Contenir) pour finir par les table qui ne sont QUE cible (ici, Article et Client). Ensuite, on supprimera la base.

RôleSQL
Supprimer une table si elle existe
Note : Cette requête risque de renvoyer une erreur si il existe encore une clé étrangère, dans une autre table, qui référence un champ de gc_article comme en possède gc_contenir (cf. plus haut).
DROP TABLE IF EXISTS `gc_article` ;
Suprimer la base si elle existe
DROP DATABASE IF EXISTS `gescom` ;
Créer/Supprimer les vues.

Une vue est une requête qu'on a enregistré pour la réutiliser comme si c'était une table. Son contenu sera modifié à chaque changement dans les tables d'origines.

RôleSQL
Créer une vue
CREATE VIEW `nomDeLaVue` AS
SELECT ... -- une requête SELECT comme une autre
Suprimer une vue
DROP VIEW IF EXISTS `nomDeLaVue` ;

Pour le contenu de la requête SELECT, je vous renvoie au chapitre éponyme (j'aime bien utiliser des mots savants de temps à autre ;D)

C'est tout !

C'est simple, non?

Pas de jointures, pas d'agrégat ni de having, pas de tri, pas de where. Le super pied !

En fait, on pourrait ajouter un tas de choses, comme, par exemple :

  • L'ordre de création des table n'est pas importants mais on utilise souvent un ordre des tables cibles aux tables sources de clés étrangères,
  • Il existe d'autres contraintes possibles, sur les valeurs contenues dans les champs (/ex. : un prix doit être >0),
  • Les identifiants numériques (id du Client, numCde) seront des champs auto incrémentés,
  • les champs clé etrangère seront déclarés INDEX,
  • etc. ...

Mais le reste viendra avec l'observation, l'habitude et l'expérience.