Création de table objet (extension au LDD SQL)

SyntaxeLDD SQL3

1
CREATE TABLE nom_table OF nom_type (
2
 PRIMARY KEY(attribut1),
3
 attribut2 NOT NULL,
4
 UNIQUE (attribut3)
5
 FOREIGN KEY (attribut4) REFERENCES ...
6
);

Il est possible, sur une table ainsi définie, de spécifier les mêmes contraintes que pour une table créée avec une clause CREATE TABLE (contraintes de table). Ces contraintes doivent être spécifiées au moment de la création de la table, et non au moment de la création du type (bien que la définition de type permet de spécifier certaines contraintes, comme NOT NULL).

ExempleHéritage

1
CREATE OR REPLACE TYPE typIntervenant AS OBJECT(
2
pknom varchar2(20),
3
prenom varchar2(20)
4
);
5
/
6
7
CREATE TABLE tIntervenant OF typIntervenant (
8
PRIMARY KEY(pknom),
9
prenom NOT NULL
10
);

ComplémentPourquoi ne spécifie-t-on pas de contrainte UNIQUE sur un OID ?

En fait un OID n'est pas une donnée, mais une adresse, donc :

  • ce n'est pas du domaine de relationnel, mais de l'objet en RO (UNIQUE c'est du relationnel) ;

  • c'est toujours unique (à l'échelle du SGBD, pas seulement de la table) donc la contrainte n'a pas de sens ;

  • c'est déjà un index de performance maximale, donc l'indexation associée à UNIQUE n'a pas de sens non plus.