Instruction CREATE TABLE
L'instruction CREATE TABLE définit une table. La définition inclut :
Le nom de la table
Les noms et attributs de ses colonnes
Les attributs de la table tels que ses clés primaire et étrangères
La syntaxe est la suivante :
CREATE TABLE nom-table (nom-col1 type-col1 [NOT NULL]
...
nom-coln type-coln [NOT NULL])
Pour DB2, la syntaxe est la suivante :
CREATE TABLE nom-table (nom-col1 type-col1 [NOT NULL]
...
nom-coln type-coln [NOT NULL])
[in Tablespace <Nom>]
Pour Oracle, la syntaxe est la suivante :
CREATE TABLE nom-table (nom-col1 type-col1 [NOT NULL]
...
nom-coln type-coln [NOT NULL])
[Tablespace <Nom>]
nom-table : Valeur " SQL " de la table, ou, à défaut, nom de la table ; les caractères non reconnus sont remplacés par "_"
nom-col : Valeur de l'attribut SQL Name de la colonne ou, à défaut, nom de la colonne ; les caractères non reconnus sont remplacés par "_"
type-col
NOT NULL : Voir Gestion de NOT NULL
Tablespace : DB2 et Oracle : Nom du tablespace cible pour les tables
La clause PRIMARY KEY est précisée dans l'ordre "CREATE TABLE" (voir Clause PRIMARY KEY).
Gestion de NOT NULL
Les clauses NULL, NOT NULL et NOT NULL WITH DEFAULT sont générées automatiquement sur les colonnes de clés primaires et sur les colonnes issues d'attributs obligatoires lors de la synchronisation.
Ces valeurs peuvent être initialisées à "Null", "Not Null" ou "Not Null with Default" en fonction du paramétrage défini dans la fenêtre de propriétés de la base de données pour Colonnes Not Null, dans le sous-onglet Synchronisation de l'onglet Options.
Les valeurs ainsi proposées peuvent ensuite être modifiées sur chaque colonne.
Clause PRIMARY KEY
Définition d'une clé primaire
Une ou plusieurs colonnes d'une table permettent d'identifier chaque ligne de cette table. Les valeurs dans ces colonnes doivent être renseignées. Elles constituent la clé primaire ("primary key") de la table.
Une table doit avoir une seule clé primaire ou aucune.
Chaque nom de colonne doit identifier une colonne de la table et la colonne ne doit pas être identifiée plus d'une fois.
Traitements et génération des ordres SQL
Après la déclaration des noms de colonnes de la table, si l'option PRIMARY KEY est active, le ou les noms de colonnes de la clé primaire sont déclarés de la manière suivante :
PRIMARY KEY (liste des colonnes de la clé primaire)
La clause PRIMARY KEY est générée dans l'ordre CREATE TABLE.
 
Exemple 1
Exemple 2
La clé primaire "CP" n'a qu'une colonne, "Col-cp".
CREATE TABLE nom-table
(Col-cp CHAR(9) NOT NULL,
info1 CHAR(7),
info2 CHAR(7),
PRIMARY KEY (Col-cp)
La clé primaire "CP1" a pour colonnes "CP11" et "CP12".
CREATE TABLE nom-table
(CP11 CHAR(9) NOT NULL,
CP12 CHAR(9) NOT NULL,
info1 CHAR(7),
info2 CHAR(7),
PRIMARY KEY (CP11, CP12)
Pour Oracle, la clause PRIMARY KEY complète est la suivante :
CONSTRAINT <nom de la clé> (liste des colonnes de la clé primaire)
Clause FOREIGN KEY
L'intégrité référentielle peut être exprimée, selon le système cible, soit par des clauses FOREIGN KEY, soit par la génération de triggers. Pour Oracle, elle est exprimée soit par des triggers, soit par des clauses FOREIGN KEY, en fonction du paramétrage de la base de données.
Une ou plusieurs colonnes d'une table peuvent faire référence à une clé primaire dans cette table ou dans une autre. Ces colonnes constituent une clé étrangère. Ces colonnes peuvent ne pas avoir de valeur sur chaque ligne.
La table qui contient la clé primaire référencée est une table parente. La table qui contient la clé étrangère est une table dépendante.
Chaque nom de colonne doit identifier une seule colonne de la table et une même colonne ne doit pas être identifiée plus d'une fois. Si la même liste de noms de colonne est spécifiée dans plus d'une clause FOREIGN KEY, ces clauses ne doivent pas identifier la même table.
Le nom de la table spécifié dans la clause FOREIGN KEY doit identifier une table parente. Une clé étrangère de table dépendante doit avoir le même nombre de colonnes que la clé primaire de la table parente.
Le nombre de clés étrangères n'est pas limité.
Traitement et génération des ordres SQL
Après la déclaration des clés primaires (PRIMARY KEY), le(s) nom(s) de colonnes de la (des) clé(s) étrangère(s) de la table sont déclarés avec l'indication FOREIGN KEY :
FOREIGN KEY (liste des colonnes de la clé étrangère) REFERENCES <Nom table parente> [ON DELETE <Action>] [ON UPDATE <Action>]
ou :
ALTER TABLE nomtable [ADD] FOREIGN KEY (liste des colonnes de la clé étrangère) REFERENCES <Nom table parente> [ON DELETE <Action>] [ON UPDATE <Action>]
 
Pour Oracle, la syntaxe est la suivante :
CONSTRAINT <nom de la clé étrangère> (liste des colonnes de la clé étrangère) REFERENCES <Nom table parente> [ON DELETE <Action>] [ON UPDATE <Action>]
ou :
ALTER TABLE...
Exemples
La table "nom-table1" a deux clés étrangères. Ces clés n'ont pas de composante.
CREATE TABLE nom-table1
(cp1 CHAR(9) NOT NULL,
cp2-rel12 CHAR(7) NOT NULL,
cp3-rel13 CHAR(7) NOT NULL,
info1 CHAR(7),
info2 CHAR(7),
PRIMARY KEY (cp1))
ALTER TABLE nom-table1 ADD FOREIGN KEY(cp2-rel12) REFERENCES nom-table2
ALTER TABLE nom-table2 ADD FOREIGN KEY(cp3-rel13) REFERENCES nom-table3
La table "nom-table1" possède une clé étrangère "ce2" qui a deux composantes, "ce21" et "ce22". La clé étrangère "ce2" n'a pas de référence (elle est donc composante de la clé primaire d'une autre table).
CREATE TABLE nom-table1
(cp1 CHAR(9) NOT NULL,
ce21 CHAR(7) NOT NULL,
ce22 CHAR(7) NOT NULL,
info1 CHAR(7),
PRIMARY KEY (cp1))
ALTER TABLE nom-table 1 ADD FOREIGN KEY (ce21, ce22)
REFERENCES nom-table 2
La table "nom-table1" a une clé étrangère, "ce2". La clé étrangère "ce2" est équivalente à la clé primaire "cp2" qui a deux composantes, "cp21" et "cp22". Les colonnes identifiées par "cp21" et "cp22" sont "NOT NULL".
CREATE TABLE nom-table1
(cp1 CHAR(9) NOT NULL,
cp21 CHAR(7) NOT NULL,
cp22 CHAR(7) NOT NULL,
info1 CHAR(7),
info2 (CHAR7),
PRIMARY KEY (cp1))
ALTER TABLE nom-table1 ADD FOREIGN KEY (cp21, cp22)
REFERENCES nom-table2
Clause UNIQUE
Une clause UNIQUE est générée pour chaque index unique de la table, sauf si cet index correspond à la clé primaire.
Traitement et génération des ordres SQL
Pour chaque index unique, la clause suivante est générée :
UNIQUE (col1,...,coln)
(col1,...n,coln) représente les colonnes de l'index.