Résumé
Dans ce chapitre, après une courte introduction à MySQL, nous allons examiner dans un premier temps les différents types de données que nous propose MySQL, puis les différentes étapes nécessaires à la création d'une base de données MySQL.
Une base de données est une entité dans laquelle il est possible de stocker des données de façon structurée et avec le moins de redondance possible. Ces données doivent pouvoir être utilisées par des programmes, par des utilisateurs différents. Ainsi, la notion de base de données est généralement couplée à celle de réseau, afin de pouvoir mettre en commun ces informations, d'o~ le nom de base.
Le concept permet de stocker et d'organiser une grande quantité d'information. Les SGBD (Système de Gestion de Base de Données) permettent de naviguer dans ces données et d'extraire (ou de mettre à jour) les informations voulues au moyen d'une requête.
Les données apparaissent comme stockées dans des tables qu'on peut mettre en relation. Une table elle-même est une relation, mais entre les différents champs qui la composent.
Ce système se démarque donc totalement en termes d'interface des bases de données de type hiérarchique, même si au plan de l'implémentation, et en fonction des statistiques d'accès à la base, un modèle hiérarchique sera utilisé, qui n'aura jamais besoin d'être pris en compte par l'utilisateur. De plus les données d'une table sont souvent subordonnées à un des champs (une clé).
Ce modèle relationnel conduit à :
une grande simplicité d'usage
une transparence pour l'utilisateur de toute réorganisation technique de la base (la seule différence pour l'utilisateur se situera, si l'opération est réussie, dans les temps de réponse).
une facilité de combinaison du contenu de plusieurs tables (opération join ou jointure).
Les tables possèdent un certain nombre de colonnes ou champs permettant de décrire des n-uplets (lignes ou enregistrements). La non-duplication (absence de redondance) des n-uplets est théoriquement assurée par le SGBDR.
Dans les relations, nous avons vu qu'il est possible de définir deux types de clés :
clé primaire : permet d'identifier un et un seul n-uplet (par exemple le numéro de sécurité sociale).
clé étrangère : c'est un attribut d'une relation qui est clé primaire dans une autre relation. Elle permet donc de lier deux tables entre elles.
Pour accéder aux données, on utilise différents opérateurs logiques, notamment la sélection (ou projection), mais aussi les jointures (dont il existe différents types). Les opérations sont communiquées sous forme de requêtes aux SGBDR (Système de Gestion de Base de Données Relationnelle). La plupart utilisent le langage normé SQL.
Dans une base de données relationnelle, le but est de séparer les informations au maximum pour éviter les doublons et la redondance, et d'empêcher la perte de qualité d'information (par exemple, l'adresse d'un fournisseur n'est mise à jour qu'une et une seule fois : la modification sera alors prise en compte sur l'ensemble des courriers). Cette bonne organisation des données nous est normalement garanti si le Modèle relationnel conçu est valide ...
MySQL est créé en 1995 par une société suédoise. Il est aujourd'hui développé et distribué par la société commerciale MySQL AB.
MySQL est passé en Open Source (GPL) depuis sa version 3.3, mais il est également proposé en version licencié.
MySQL AB fournit différents types de logiciels :
Le serveur MYSQL et les scripts de démarrage :
mysqld est le serveur MySQL
mysqld_safe , mysql.server et mysqld_multi sont les scripts de démarrage.
mysql_install_db initialise le dossier de données et les premi~res bases.
Logiciels clients pour accéder au serveur :
mysql est un client en ligne de commande, pour éxécuter des commandes SQL, interactivement, ou en mode batch.
mysql-query-browser est un client interactif graphique, pour exécuter des commandes SQLadministrer le serveur
mysql-admin est un client interactif graphique pour administrer le serveur
mysqladmin est un client d'administration
mysqlcheck effectue les opérations de maintenance sur les tables
mysqldump etmysqlhotcopy font les sauvegardes de bases
mysqlimport importe des fichiers de données
mysqlshow affiche des informations sur les bases et les tables
Utilitaires qui fonctionnent indépendamment du serveur :
myisamchk effectue les opérations de maintenance des tables
myisampack produit des tables compressées, en lecture seule
mysqlbinlog est un outil pour traiter les fichiers de logs binaires
perror affiche le message associé ~ un code d'erreur
Extrait du manuel de référence de MySQL :
MySQL est un serveur de bases de données relationnel.Un serveur de bases de données stocke les données dans des tables séparées plutà´t que de tout rassembler dans une seule table. Cela améliore la rapidité et la souplesse de l'ensemble. Les tables sont reliées par des relations définies, qui rendent possible la combinaison de données entre plusieurs tables durant une requête. Le SQL dans `` MySQL '' signifie `` Structured Query Language '' : le langage standard pour les traitements de bases de données.
MySQL est Open Source . Open Source (Standard Ouvert) signifie qu'il est possible à chacun d'utiliser et de modifier le logiciel. Tout le monde peut télécharger MySQL sur Internet, et l'utiliser sans payer aucun droit. Toute personne en ayant la volonté peut étudier et modifier le code source pour l'adapter à ses besoins propres. Le logiciel MySQL utilise la licence GPL ( GNU General Public License ), pour définir ce que vous pouvez et ne pouvez pas faire avec ce logiciel, dans différentes situations. Si vous ne vous sentez pas confortable avec la licence GPL ou bien que vous devez intégrer MySQL dans une application commerciale, vous pouvez acheter une licence commercial auprès de MySQL AB. Licences MySQL .
Pourquoi utiliser le serveur de bases de données MySQL ?Le serveur de bases de données MySQL est très rapide, fiable et facile à utiliser. Si c'est ce que vous recherchez, vous devriez faire un essai. Le serveur de bases de données MySQL dispose aussi de fonctionnalités pratiques, développées en coopération avec nos utilisateurs. Vous pouvez trouver une comparaison des performances du serveur MySQL avec d'autres systèmes de bases de données dans nos pages de tests de performances. La suite de tests comparatifs de MySQL .Le serveur MySQL a été développé à l'origine pour gérer de grandes bases de données plus rapidement que les solutions existantes, et a été utilisé avec succès dans des environnements de production très contraints et très exigeants, depuis plusieurs années. Bien que toujours en développement, le Le serveur MySQL offre des fonctions nombreuses et puissantes. Ses possibilités de connexions, sa rapidité et sa sécurité font du serveur MySQL une serveur hautement adapté à Internet.
Les caractéristiques techniques du serveur MySQL .Le logiciel de bases de données MySQL est un système client/serveur, constitué d'un serveur SQL multi-threadé qui supporte différents systèmes de stockage, plusieurs logiciels clients et librairies, outils d'administration, ainsi que de nombreuses interfaces de programmation (des API ).Nous fournissons aussi le serveur MySQL sous la forme d'une librairie multi-threadé que vous pouvez inclure dans vos applications, pour obtenir un produit plus compact, plus rapide et plus facile à gérer.
Toutes les manipulations sur les bases de données, que ce soit en terme d'administration ou d'exploitation, se feront via une connexion au serveur MySQL, qui peut être hébergé ou distant. Dans le cadre de ce cours, il sera proposé deux méthodes de travail : via les outils GUI ou via la ligne de commande.
Nous verrons dans la partie consacré aux privilèges que les autorisations de connexions au serveur sont définies en fonction du couple login/password des utilisateurs MySQL, mais aussi en fonction du poste appelant. Néanmoins, vous devriez pouvoir vous connecter sur votre environnement de développement en utilisant les comptes par défaut (root, que nous n'avons pas encore sécurisé).
La création d'une base de données va nécessiter l'exécution d'une requête sur le serveur, nous allons devoir nous y connecter, soit en utilisant l'outil graphique mysql-query-browser soit en ligne de commande avec mysql.
Exemple 1. Connexion au serveur
ikare@kaitan:~$ mysql -h arrakis -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 25 Server version: 5.1.17-beta FreeBSD port: mysql-server-5.1.17 mysql>
Créer une base de données sous MySQL se fait via une requête normalisée SQL. Lors de la création, MySQL effetue les opérations suivantes :
Création des répertoires qui stockeront les fichiers de données (données, index, etc..)
Mise à jour de la base information_schema, qui contient les options des différentes bases de données hébergées
La requête de création de base CREATE DATABASE est la suivante :
CREATE DATABASE [IF NOT EXISTS] db_name
[create_specification [, create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name
Les options permettent de ne ne créer la base de données que si elle n'existe pas (sinon, la requête retourne une erreur en cas de conflit), et de préciser les jeux de caractères utilisés dans les tables. Par défault, il s'agit de latin1, qui représente l'encodage ISO 8859-1 West European. La collation (les règles qui régissent les méthodes de comparaison et de classement des caractères) qui y est associée est latin1_swedish_ci.
Tout au long de ce cours, nous allons travailler sur un exemple de base de données, relatif à la gestion d'un bibliothèque personnelle. Nous allons donc créer la base de données bibliotheque.
Exemple 2. Création de la base biblotheque
mysql> CREATE DATABASE bibliotheque; Query OK, 1 row affected (0.00 sec)
Dans ce premier exemple de requête SQL, on peut noter l'emploi de convention de nommage de la base (pas d'accents, de caractères spéciaux, d'espace, etc..), et un premier apperçu de la structure du langage SQL, avec en particulier le point- virgule qui termine chaque instructions du langage.
La liste des bases de données créées sur le serveur peut être obtenues en utilisant la commande SHOW DATABASES :
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | bibliotheque | | database | | location_planche | | mysql | | test | +--------------------+ 6 rows in set (0.00 sec)
Nous avons vu dans le cours sur la modélisation des données que nous devons typer les données stockées dans le système d'informations. Si nous sommes restés jusque là relativement éloigné de l'implémentation physique des données, nous allons devoir maintenant choisir avec précision les types de données utilisés dans les tables
MySQL supporte un grand nombre de types de colonnes, qui peuvent être rassemblés en trois groupes : les nombres, les dates et les chaînes de caractères. Les types de données de MySQL sont listés ci-dessous. Les codes suivants sont utilisés pour préciser les modes d'affichages :
M : Indique la taille maximale d'affichage. Le maximum légal est 255.
D : S'applique aux nombres à virgule flottante, et indique le nombre de décimales qui suivent la virgule. Le nombre maximum est de 30, mais ne doit pas être plus grand que M -2.
UNSIGNED : Indique si la propriété optionnelle indiquant si un type de données est toujours positif est autorisée. Si UNSIGNED est présent, le nombre est toujours positif.
ZEROFILL : la présence de cette propriété optionnelle indique que des zéros doivent être placés comme caractère de remplissage. Par exemple, pour un type
INT(5) ZEROFILL, la valeur4sera lue0004.
Le tableau ci-dessous cite les différents types de données numériques sous MySQL. M indique la taille d'affichage, et D (valable pour les nombres en virgule flottante), représente le nombre de chiffres après la virgule.
Tableau 1. Types numériques sous MySQL
| Type | Borne inférieure | Borne supérieure |
TINYINT | -128 (unsigned : 0) | 127 (unsigned : 255 ) |
SMALLINT | -32768 (unsigned : 0) | 32767 (unsigned : 65535) |
MEDIUMINT | -8388608 (unsigned : 0) | 8388607 (unsigned : 16777215) |
INT | -2147483648 (unsigned : 0) | 2147483647 (unsigned : 4294967295) |
BIGINT | -9223372036854775808 (unsigned : 0) | 9223372036854775807 (unsigned : 18446744073709551615) |
FLOAT | -3.402823466E+38 | 3.402823466E+38 |
DOUBLE | -1.7976931348623157E+308 | 1.7976931348623157E+308 |
Type
TIME: MySQL lit et affiche les colonnes de typeTIMEau format 'HH:MM:SS'. Les valeurs TIME non valides sont transformées en date zéro '00:00:00'Type
DATE: Le typeDATEest prévu lorsque vous souhaitez stocker une date. MySQL affiche les valeurs de typeDATEau format 'AAAA-MM-JJ'. L'intervalle de validité va de '1000-01-01' à '9999-12-31'. Les dates non valides sont transformées en "0000-00-00"Type
DATETIME: Le typeDATETIMEest prévu lorsque vous souhaitez stocker une date et une heure. MySQL affiche les valeurs de typeDATETIMEau format 'AAAA-MM- JJ HH:MM:SS'Type
TIMESTAMP: Le typeTIMESTAMPest prévu pour stocker automatiquement l'heure courante lors d'une commandeINSERTouUPDATE. Si vous avez plusieurs colonnes de typeTIMESTAMP, seule la première colonne sera mise à jour automatiquement.
CHAR(L): dans ce cas, quelque soit la longueur effective de la chaîne, elle sera toujours stockés sur un nombre d'octets fixe, L. Par exemple, si vous définissez CHAR (10) et que vous entrez la chaîne "Bonjour", elle sera complétée par trois espace dans la table.CHAR(L) BINARY: identique mais insensible à la casse lors de tris et des recherchesVARCHAR(L): dans ce cas, MySQL stocke la chaîne, plus un octet définissant la longueur effecctive de l'enregistrement. Dans notre exemple "bonjour", cette chaîne occupera 7+1 octets dans la base.TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT: ces types de données peut en fait être considéré comme un VARCHAR, mais dont les tailles maximales respectives sont : 225, 65535, 16777215, 4294967295TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB: ces types de données peut en fait être considéré comme un VARCHAR BINARY, et ainsi contenir des données binaires dont tailles maximales respectives sont : 225, 65535, 16777215, 4294967295
Un attribut de type ENUM peut prendre une valeur parmi celles déinies lors de la crétion de la table plus la chaîe vide ainsi que NULL si la déinition le permet. Ces valeurs sont exclusivement des chaînes de caract~res. Une énumération peut contenir 65535 éléments au maximum.
La définition d'un tel attribut se fait de la manière suivante :
nom_attribut ENUM("valeur 1","valeur 2", ...)
nom_attribut ENUM("valeur 1","valeur 2", ...) NULL
A chaque valeur est associée un index allant de 0 à N si N valeurs ont été définies. L'index 0 est associé à la chaîne nulle, l'index 1 à la première valeur, lindex NULL est associé à la valeur NULL.
Un attribut de type SET peut prendre pour valeur la chaîne vide, NULL ou une chaîne contenant une liste de valeurs qui doivent être déclarées lors de la définition de l'attribut. Il ne peut être défini que 64 éléments maximum.
Par exemple, un attribut déclaré comme suit :
SET("dvd",vhs","divx")
peut prendre les valeurs suivantes :
"" (chaîne vide) "dvd,divx" "dvd",vhs","divx"
et autres combinaisons de listes des trois valeurs définie plus haut, avec en plus la valeur NULL.
La base de données que l'on a créé dans le chapitre précédent relative à la gestion d'une bibliothèque personnelle doit reprendre le modèle relationnel suivant :
LIVRE(_LIV_NUM_, LIV_TITRE, LIV_SS_TITRE, #COL_NUM) COLLECTION(_COL_NUM_, COL_NOM, COL_EDITEUR) AUTEUR(_AUT_NUM_, AUT_NOM, AUT_PRENOM, AUT_DATE_NAISSANCE) ECRIT(_ #LIV_NUM, #AUT_NUM_, ECR_ANNEE) LIV_NUM : Entier de 0 à 65536 LIV_TITRE : chaîne de caractères de longueur maximale 60 LIV_SS_TITRE : chaîne de caractères de longueur maximale 60 COL_NUM : Entier de 0 à 255 COL_NOM : chaîne de caractères de longueur maximale 60 COL_EDITEUR : chaîne de caractères de longueur maximale 60 AUT_NUM : Entier de 0 à 65536 AUT_NOM : chaîne de caractères de longueur maximale 60 AUT_PRENOM : chaîne de caractères de longueur maximale 60 AUT_DATE_NAISSANCE : Date ECR_ID : Entier de 0 à 65536 ECR_ANNEE : Année
Il est à remarquer la convention de nommage des champs des relations par rapport aux noms des relations.. Pour des raisons de mise en page, les identifiants ne sont pas soulignés, mais encacdrés de signe "_".
Exercice : Donnez le MCD correspondant à ce modèle relationnel
La création d'une table en SQL se fait via la requête CREATE TABLE. La documentation de MySQL vous donnera la syntaxe complète de cette instruction, mais en voici un synopsys simplifié :
CREATE TABLE nom_table (
nom_champ1 type_champ [NULL|NOT NULL] [AUTO_INCREMENT] [PRIMARY KEY],
nom_champ1 type_champ [NULL|NOT NULL] [AUTO_INCREMENT],
...
) TYPE= {BDB|HEAP|ISAM|InnoDB|MERGE|MRG_MYISAM|MYISAM};
Les options NOT NULL/NULL (possibilité que la valeur d'un champ n'existe pas pour un enregistrement ou non) et AUTO_INCREMENT (incrémentation automatique d'un identifiant) sont facultatives. La clause PRIMARY KEY permet de spécifier que le champ joue le rôle de clef primaire.
Le type de la table a sont importance : en effet, selon les types choisi, la manière de stocker les informations pour MySQL sera différente (organisation de fichiers, modes d'acès, ..). Les types les plus couramment utilisés sont :
MYISAM: moteur issu du moteur de stockage originel de MySQL (Isam), rapide, masi ne supporte pas les transactions et les clefs étrangèresInnoDB: réputé plus lent, supporte transactions et clefs étrangères
De manière générale, nous utiliserons les types de tables InnoDB.
Nous allons maintenant créer une première table de la base de données bibliothèque, la table COLLECTION :
mysql> CREATE TABLE COLLECTION (
-> COL_NUM TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> COL_NOM VARCHAR(60) NOT NULL,
-> COL_EDITEUR VARCHAR(60) NOT NULL
-> );
Query OK, 0 rows affected (0.00 sec)
Nous pouvons vérifier la bonne création de la table en utilisant les instructions SQL SHOW TABLES et DESC :
mysql> SHOW TABLES; +------------------------+ | Tables_in_bibliotheque | +------------------------+ | COLLECTION | +------------------------+ 1 row in set (0.00 sec) mysql> DESC COLLECTION; +-------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------------+------+-----+---------+----------------+ | COL_NUM | tinyint(3) unsigned | NO | PRI | NULL | auto_increment | | COL_NOM | varchar(60) | NO | | | | | COL_EDITEUR | varchar(60) | NO | | | | +-------------+---------------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
Exercice : En respectant les types de données indiquée plus haut, créez la table AUTEUR
Lors de la recherche d'informations dans une relation, MySQL parcours la table correspondante dans n'importe quel ordre. Dans le cas d'un grand nombre de lignes, cette recherche est très longue du fait du parcours de toute la table. Pour y remédier, une optimisation possible et fortement recommandée, est d'utiliser des index.
La création d'un index associé à un attribut ou à un ensemble ordonné d'attributs va créer une liste ordonnée des valeurs de ces attributs et de l'adresse de la ligne associée. C'est sur les valeurs de cette liste que se feront les recherches et les tris. Les algorithmes de recherche et de tri sur des ensembles ordonnées sont énormément plus rapides !
Ainsi, d'une recherche à coût prohibitif, on passe à une recherche sur un ensemble déjà trié. On gagne donc énormément en temps d'accès aux informations. Bien que cela ralentisse les mises à jour (insertion, suppression, modification de clé).
On choisira de créer des index sur les attributs qui seront les plus sollicités par les recherches ou utilisés comme critère de jointure. Par contre, on épargnera les attributs qui contiennent peu de valeurs différentes les unes des autres et ceux dont les valeurs sont très fréquemment modifiées.
Pour créer un index, on utilise l'instruction INDEX. Un index peut porter sur 15 colonnes maximum. Une table peut posséder au maximum 16 indexes. Un index peut avoir une taille d'au maximum 256 octets et ne doit porter que sur des attributs NOT NULL.Un exemple de création d'index vous est proposé dans le paragraphe suivant
Nous avons vu toute l'importance des contraintes d'intégrité référentielle, et des clefs étrangères en particulier. Pour créer des clefs étrangères lors de la création des tables, il faut que :
les champs existent en tant que clef primaires de tables déjà créées
le type des champs clefs dans les deux tables soient les mêmes
des index soient créés sur les champs
Ainsi, la création de la table LIVRE de notre exemple se ferait avec l'instruction suivante :
mysql> CREATE TABLE LIVRE (
-> LIV_NUM SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
-> LIV_TITRE VARCHAR(60) NOT NULL,
-> LIV_SS_TITRE VARCHAR(60) NULL,
-> COL_NUM TINYINT UNSIGNED ,
-> PRIMARY KEY (LIV_NUM),
-> FOREIGN KEY(COL_NUM ) REFERENCES COLLECTION(COL_NUM) ON DELETE RESTRICT ON UPDATE CASCADE,
-> INDEX(COL_NUM)
-> );
Query OK, 0 rows affected (0.00 sec)
Dans le précédent exemple :
le champs
COL_NUMexiste en tant que clef primaireCOLLECTIONle type de
COL_NUMest bien le même dans la tableCOLLECTIONet dans la tableLIVRE.un index est créé sur
COL_NUMon indique à MySQL de modifier (UPDATE)en cascade les enregistrements de la table
LIVREsi on modifie un enregistrement lié de la tableCOLLECTIONon indique à MySQL d'empêcher (RESTRICT) la suppression d'un enregistrement de la table
COLLECTIONsi est lié dans la tableLIVRE
La création d'une relation par CREATE TABLE n'en rend pas définitives les spécifications. Il est possible d'en modifier la définition par la suite, à tout moment par la commande ALTER TABLE :
ajouter/supprimer un attribut.
créer/supprimer une clé primaire.
ajouter une contrainte d'unicité (interdire les doublons).
changer la valeur par défaut d'un attribut.
changer totalement la définition d'un attribut.
changer le nom de la relation.
ajouter/supprimer un index.
La syntaxe générale de l'instruction est :
ALTER TABLE relation MODIFY attribut definition_relative
ALTER TABLE relation ALTER attribut { SET DEFAULT valeur | DROP DEFAULT }
ALTER TABLE relation ADD UNIQUE (attributs)
ALTER TABLE relation DROP attribut
ALTER TABLE relation ADD definition
ALTER TABLE relation ADD INDEX index (attributs)
ALTER TABLE relation DROP INDEX index
Exercice : Modifiez la table LIVRE de manière à faire apparître un nouveau champ : LIV_GENRE, qui soit une énumération ayant pour valeurs possible : "policier", "science-fiction", "historique"
Nous avons vu dans les exercices du cours sur la modélisation le MCD d'une base de données pour la gestion d'un hôtel. Nous utiliserons cette base et son contenu dans plusieurs exercices au long de ce cours.
En utilisant l'interface de votre choix, créez en local la base de données HOTEL, qui hébergera les données de gestion de l'hôtel.
Pour que nous partions tous sur la même base de données, je vous propose d'exécuter le script cree_hotel.sql, qui contient la définition de toutes les tables de la base de données
Téléchargez le ici et exécutez le sur votre serveur. Donnez la liste complète des instructions qui permettent de vérifier que les tables et les colonnes ont bien été créées.
On souhaite rajouter les informations suivantes :
les chambres peuvent disposer ou non d'une prise ethernet pour l'accès à Internet (par défaut elles le sont toutes, sauf quelques unes)
les chambres peuvent être équipées d'un frigo (par défaut non)
Donnez les requêtes SQL permettant de faire ces modifications dans la structure de la base.
On vous fournit le MR suivant :
FILM(CodeFilm, TitreFilm, Annee, Duree, Resume,
#CodeGenre)
GENRE(CodeGenre, IntGenre)
ACTEUR(CodeActeur, NomActeur, PrenomActeur)
JOUER_UN_ROLE(#CodeFilm, #CodeActeur)
SUPPORT(CodeSupport, IntSupport)
FILM_SUPPORT(#CodeFilm,#CodeSupport)
EMPRUNTEUR(CodePers, NomPers, PrenomPers, AdrPers,
TelPers)
EMPRUNT(#CodeFilm, #CodePers, DatePret,
DateRetour)
Vous devez me présenter
Le modèle conceptuel des données
Les requêtes nécéssaires à la traduction du schéma relationnel sachant que :
Les types de données :
Valeurs entières : clés primaires (sauf Date de prêt), Durée du film
Chaînes de caractères : Titre de film(80), Année(4), Résumé( ?), Genre(20), Nom de l'acteur (25), prénom de l'acteur(25), support(10), emprunteur(nom : 25, prénom : 25, adresse : 50, téléphone : 14)
Dates : Date de prêt, date de retour
Les contraintes :
Toutes les informations concernant l'emprunteur sont obligatoires, ainsi que : le nom de l'acteur, le genre, le support et le titre de film
Ecrire les requêtes permettant:
D'indiquer que le champ « PrenomActeur » ne soit jamais nul.
D'ajouter la colonne « DatNaiss » dans la table ACTEUR.
De créer un index sur le champ « TitreFilm »
Effectuer les modifications nécessaires au stockage :
Des informations qui concernent les réalisateurs (nom, prénom et sexe)
Du fait qu'un réalisateur peut réaliser de 0 à n films
Du fait qu'un film ait pu être réalisé par plusieurs réalisateurs
Du fait que le sexe ne peut contenir que M (Masculin) ou F (Féminin) (M par défaut)
Du fait qu'un film puisse appartenir à une série de films