Objectifs Dans ce chapitre, vous allez étudier les principaux objets d'une base de données et les relations qu'ils entretiennent. Vous apprendrez également à créer, modifier et supprimer des tables.
Objets d'une Base de Données Une base de données Oracle8 peut contenir de nombreuses structures de données. Chaque structure doit être prédéfinie lors de la conception de la base de données pour pouvoir être créée durant la phase de construction de la base. Table : stocke les données Vue : sous-groupes de données issues d'une ou de plusieurs tables Séquence : génère des valeurs de clés primaires Index : améliore les performances de certaines requêtes Synonyme : permet de donner un autre nom à un objet Structures des Tables Oracle8 Vous avez la possibilité de créer des tables à tout moment, y compris lorsque la base de données est déjà en cours d'utilisation. Vous n'avez pas à spécifier de taille pour les tables. La taille est en fait définie en fonction de l'espace total alloué à la base de données. Il est important, néanmoins, d'estimer l'espace qu'occupera une table avec le temps. La structure des tables peut être modifiée en ligne. Remarque: Il existe d’autres objets dans la base de données mais ils ne sont pas présentés dans ce cours.
Règles de Dénomination Nommez les tables et colonnes de votre base de données en suivant les règles de dénomination applicables à tous les objets d'une base de données Oracle8. Les noms de table et de colonnes doivent commencer par une lettre et peuvent comprendre de 1 à 30 caractères. Les noms ne doivent pas contenir d'autres caractères que les caractères A à Z, a à z, 0 à 9, _ (trait de soulignement), $ et # (caractères autorisés, mais déconseillés). Les noms ne doivent pas être utilisés pour nommer plusieurs objets appartenant au même utilisateur Oracle8 Server. Ces noms ne doivent pas être des mots réservés Oracle8 Server. Conseils Utilisez des noms parlants. Utilisez une dénomination uniforme pour des entités identiques appartenant à des tables différentes. Par exemple, la colonne numéro du département s'appelle DEPTNO dans la table EMP et dans la table DEPT. Remarque : les majuscules et minuscules ne sont pas différenciées dans les noms. Par exemple, EMP est identique à eMP ou eMp. Pour plus d'information, reportez-vous à Oracle8 Server SQL Reference, Release 8.0 , "Object Names and Qualifiers."
L'Ordre CREATE TABLE Créez des tables pour stocker des données en utilisant l'ordre SQL CREATE TABLE. Cet ordre fait partie d'une série d'ordres appartenant au langage de définition des données (LDD) qui sera étudié dans les prochains chapitres. Les ordres du LDD représentent un sous-ensemble des ordres SQL utilisés pour créer, modifier ou supprimer des structures de données Oracle8. Ils agissent directement sur la base de données, et enregistrent des informations dans le dictionnaire de données. Pour créer une table, l'utilisateur doit disposer du privilège CREATE TABLE et d'un espace de stockage dans laquelle il pourra créer des objets. L'administrateur de base de données utilise des ordres du LCD (langage de contrôle des données) pour accorder des privilèges aux utilisateurs ; ces ordres seront étudiés dans un prochain chapitre. Syntaxe : schema nom du propriétaire table nom de la table DEFAULT expr spécifie une valeur par défaut à utiliser en cas d'omission d'une valeur dans l'ordre INSERT column nom de la colonne datatype type de données et longueur de la colonne Pour plus d'informations, reportez-vous à Oracle8 Server SQL Reference, Release 8.0 , "CREATE TABLE."
Références aux Tables d'un Autre Utilisateur Un schéma est une collection d'objets. Les schémas sont des structures logiques qui font directement référence aux données de la base. Ils peuvent contenir des tables, des vues, des synonymes, des séquences, des procédures stockées, des index, des clusters et des database link. Lorsqu'une table n'appartient pas à l'utilisateur, son nom doit être préfixé par le nom de son propriétaire.
L'Option DEFAULT On peut déclarer une valeur par défaut pour une colonne en utilisant l'option DEFAULT. Cette option empêche l'insertion de valeurs NULL dans une colonne lors de l'ajout d'une ligne qui ne comporte pas de données pour cette colonne. La valeur par défaut peut être un littéral, une expression ou une fonction SQL telle que SYSDATE et USER ; elle ne peut pas être le nom d'une autre colonne ni d'une pseudo-colonne, telle que NEXTVAL ou CURRVAL. L'expression par défaut doit correspondre au type de données de la colonne.
Création de Tables L'exemple ci-dessus crée la table DEPT avec trois colonnes nommées DEPTNO, DNAME et LOC. Il vérifie ensuite la création de la table avec la commande DESCRIBE. Comme la création d'une table fait appel à un ordre du LDD, une validation automatique a lieu lors de son exécution.
Interrogation du Dictionnaire de Données Vous pouvez interroger les tables du dictionnaire de données pour afficher différents objets de la base vous appartenant. Les tables du dictionnaire de données les plus fréquemment utilisées sont les suivantes : USER_TABLES USER_OBJECTS USER_CATALOG Remarque : CAT est un synonyme de USER_CATALOG. Vous pouvez l'utiliser à la place de USER_CATALOG dans les ordres SQL. SQL> SELECT * 2 FROM CAT;
Types de Données
Création d'une Table avec des Lignes d'une Autre Table. Il existe une deuxième façon de créer une table, qui consiste à utiliser la clause AS subquery. Cette méthode permet à la fois de créer la table et d'y insérer des lignes ramenées par une sous-interrogation. Syntaxe : table nom de la table column nom de la colonne, valeur par défaut et contrainte d'intégrité subquery ordre SELECT qui définit le groupe de lignes à insérer dans la nouvelle table Conseils La table est créée avec les noms de colonnes spécifiés, puis remplie avec les lignes extraites au moyen de l'ordre SELECT. La définition des colonnes ne peut contenir que le nom de la colonne et la valeur par défaut. Si des colonnes sont spécifiées, leur nombre doit être le même que celui de la sous-interrogation SELECT. Si aucune colonne n'est spécifiée, elles seront du même nom que celles de la sous-interrogation.
Création d'une Table avec des Lignes d'une Autre Table L'exemple ci-dessus crée une table, DEPT30, qui contient des informations concernant tous les employés du département 30. Remarquez que les données destinées à la table DEPT30 proviennent de la table EMP. Vous pouvez vérifier l'existence d'une table de base de données et contrôler les définitions de colonne en utilisant la commande SQL*Plus DESCRIBE. Indiquez l'alias de colonne lors de la sélection de l'expression.
Ordre ALTER TABLE Après avoir créé vos tables, il peut arriver que vous deviez en modifier la structure pour ajouter une colonne oubliée ou que vous décidiez de changer une définition de colonne. Cela est possible grâce à l'ordre ALTER TABLE. Vous pouvez ajouter des colonnes à une table en utilisant l'ordre ALTER TABLE avec la clause ADD. Syntaxe : table nom de la table column nom de la nouvelle colonne datatype type de données et longueur de la nouvelle colonne DEFAULT expr valeur par défaut de la nouvelle colonne Vous pouvez modifier des colonnes existantes d'une table au moyen de l'ordre ALTER TABLE avec la clause MODIFY. Remarque : la diapositive ne présente pas l'ensemble de la syntaxe de l'ordre ALTER TABLE. Celui-ci sera étudié plus en détails dans le chapitre 14.
Ajout de Colonnes L'exemple ci-dessus ajoute la colonne JOB à la table DEPT30. Notez que la nouvelle colonne est placée à la fin de la table.
Conseils pour l'Ajout de Colonnes Vous pouvez ajouter ou modifier des colonnes dans une table, mais vous ne pouvez pas en supprimer. Vous ne pouvez pas choisir l'emplacement de la nouvelle colonne : elle est systématiquement placée à la fin de la table. L'exemple ci-dessus ajoute la colonne nommée JOB à la table DEPT30. La colonne JOB devient la dernière colonne de la table. Remarque : si une table contient déjà des lignes lorsque l'on ajoute une colonne, la nouvelle colonne sera initialisée à NULL pour toutes les lignes sauf si l’on précise une valeur par défaut, dans ce cas pour toutes les lignes de la table, la colonne sera initialisée avec la valeur par défaut.
Modification de Colonnes Vous pouvez modifier la définition d'une colonne au moyen de l'ordre ALTER TABLE et de la clause MODIFY. Les modifications effectuées peuvent être des modifications du type de données, de taille et de la valeur par défaut. Conseils Vous pouvez augmenter la largeur ou la précision d'une colonne numérique. Réduisez la largeur d'une colonne si celle-ci ne contient que des valeurs NULL ou si la table ne contient aucune ligne. Modifiez le type de données si la colonne contient des valeurs NULL ou si la table est vide. Convertissez une colonne de type CHAR en type de données VARCHAR2 ou inversement, si la colonne contient des valeurs NULL, si vous ne réduisez pas sa taille ou si la table est vide. La modification d'une valeur par défaut ne s'appliquera qu'aux insertions ultérieures.
Suppression de Tables L'ordre DROP TABLE supprime la définition d'une table Oracle8. Lorsque vous supprimez une table, la base de données perd toutes les données de la table ainsi que tous les index associés. Syntaxe où : table est le nom de la table Conseils Toutes les données de la table sont supprimées. Les vues, synonymes ne sont pas supprimés mais ne sont plus utilisables. Toute transaction en instance est validée. Seul le créateur de la table ou un utilisateur ayant le privilège DROP ANY TABLE peut supprimer une table. Une fois exécuté, l'ordre DROP TABLE est irréversible. Oracle8 Server ne demande pas confirmation lorsque vous lancez cet ordre. Si vous êtes le propriétaire de la table ou disposez d'un niveau de privilège élevé, la table sera immédiatement supprimée. Tous les ordres du LDD effectuent une validation qui rend la transaction permanente. DROP TABLE table;
Suppression de Tables L'ordre DROP TABLE supprime la définition d'une table Oracle8. Lorsque vous supprimez une table, la base de données perd toutes les données de la table ainsi que tous les index associés. Syntaxe où : table est le nom de la table Conseils Toutes les données de la table sont supprimées. Les vues, synonymes ne sont pas supprimés mais ne sont plus utilisables. Toute transaction en instance est validée. Seul le créateur de la table ou un utilisateur ayant le privilège DROP ANY TABLE peut supprimer une table. Une fois exécuté, l'ordre DROP TABLE est irréversible. Oracle8 Server ne demande pas confirmation lorsque vous lancez cet ordre. Si vous êtes le propriétaire de la table ou disposez d'un niveau de privilège élevé, la table sera immédiatement supprimée. Tous les ordres du LDD effectuent une validation qui rend la transaction permanente. DROP TABLE table;
Modification du Nom d'un Objet L'ordre RENAME est un ordre du LDD qui permet de renommer une table, une vue, une séquence ou un synonyme. Syntaxe RENAME old_name TO new_name; où : old_name est l'ancien nom de la table, de la vue, de la séquence ou du synonyme new_name est le nouveau nom de la table, de la vue, de la séquence ou du synonyme Vous devez être propriétaire de l'objet que vous renommez.
Vider une Table TRUNCATE TABLE est un autre ordre LDD, qui permet de supprimer toutes les lignes d'une table tout en libérant l'espace utilisé pour stocker cette table. L'ordre TRUNCATE TABLE ne peut être annulé. Syntaxe TRUNCATE TABLE table ; où : table est le nom de la table Vous devez être propriétaire de la table ou disposer du privilège système DELETE TABLE pour tronquer une table. L'ordre DELETE supprime aussi les lignes d'une table, mais il ne libère pas l'espace de stockage.
Ajout de Commentaires à une Table Vous pouvez ajouter un commentaire, comprenant jusqu'à 2000 octets, à une colonne, à une table, à une vue ou à un snapshot au moyen de l'ordre COMMENT. Le commentaire est stocké dans le dictionnaire de données et peut être affiché au moyen de l'une des vues suivantes du dictionnaire de données : ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS Syntaxe où : table est le nom de la table column est le nom de la colonne dans la table text est le texte du commentaire Vous pouvez supprimer un commentaire d'une base de données en le déclarant comme chaîne de caractère vide (' '). COMMENT ON {TABLE table | COLUMN table.column} IS ' text ' ; SQL> COMMENT ON TABLE emp IS '';
CREATE TABLE Crée une table. Crée une table sur la base d'une autre table au moyen d'une sous-interrogation. ALTER TABLE Modifie la structure d'une table. Change la largeur des colonnes, le type de données des colonnes, ajoute des colonnes. DROP TABLE Supprime les lignes et la structure d'une table. Cet ordre ne peut être annulé après exécution. RENAME Renomme une table, une vue, une séquence ou un synonyme. TRUNCATE Supprime toutes les lignes d'une table et libère l'espace occupé par la table. L'ordre DELETE supprime seulement les lignes. COMMENT Ajoute un commentaire à une table ou à une colonne. Interroger le dictionnaire de données pour afficher un commentaire.