Bonsoir Syntcpip,
Traitons donc des règles classiques du Passage à SQL.
(1) Traduction d’une classe en table :
La classe fait l’objet d’une table.
Les attributs de la classe deviennent les colonnes de la table.
Le type des attributs est parfois à renommer. Ainsi, si le type entier (INT) est le même, le type String est en général à renommer en TEXT, CHAR, VARCHAR, etc., en fonction de votre SGBD (le type le plus souvent utilisé est en l’occurrence VARCHAR).
Les opérations sont ignorées.
Un identifiant de classe devient une contrainte, plus précisément une clé primaire SQL (primary key) (symbolisée ci-dessous par le mickey <pk>, voyez par exemple l’attribut ServiceId). A noter qu’une clé primaire est une spécialisation de ce qu’on appelle clé candidate (dont la fonction première est de garantir la non redondance des lignes d’une table), le pendant de la clé primaire est dite clé alternative. Par exemple, si la classe SERVICE était dotée d’un attribut (naturel) ServiceCode, tel qu’il n’existe pas deux services ayant la même valeur pour cet attribut, alors la table SERVICE serait à doter d’une clé alternative {ServiceCode}.
Exemple :
SQL ne propose aucun graphique pour représenter les tables, seuls les AGL le font. SQL ne propose que des instructions.
Pour les tables ci-dessus :
CREATE TABLE SERVICE
(
ServiceId INT NOT NULL
, ServiceNom VARCHAR(48) NOT NULL
, CONSTRAINT SERVICE_PK PRIMARY KEY (ServiceId)
) ;
CREATE TABLE ARCHIVE
(
ArchiveId INT NOT NULL
, ArchiveNom VARCHAR(64) NOT NULL
, ArchiveDate DATE NOT NULL
, ArchiveTaille INT NOT NULL
, CONSTRAINT ARCHIVE_PK PRIMARY KEY (ArchiveId)
) ;
(2) Traduction d’une association de N à 1.
Si les AGL proposent de visualiser les liens N à 1 entre tables au moyen de ficelles plus ou moins parlantes, pour sa part SQL impose que la référence d’une table (par exemple ARCHIVE) à une autre (par exemple SERVICE) mette en jeu une contrainte dite référentielle, plus connue sous le nom (assez étrange il faut le dire) de clé étrangère (mickey <fk> ci-dessous), système qui impose d’ajouter — dans l’en-tête (liste des attributs) de la table référençante — les attributs composant la clé primaire (ou autre clé candidate) de la table référencée.
CREATE TABLE SERVICE
(
ServiceId INT NOT NULL
, ServiceNom VARCHAR(48) NOT NULL
, CONSTRAINT SERVICE_PK PRIMARY KEY (ServiceId)
) ;
CREATE TABLE ARCHIVE
(
ArchiveId INT NOT NULL
, ServiceId INT NOT NULL
, ArchiveNom VARCHAR(64) NOT NULL
, ArchiveDate DATE NOT NULL
, ArchiveTaille INT NOT NULL
, CONSTRAINT ARCHIVE_PK PRIMARY KEY (ArchiveId)
, CONSTRAINT ARCHIVE_SERVICE_FK FOREIGN KEY (ServiceId) REFERENCES SERVICE (ServiceId)
) ;
Notez la présence la clause « NOT NULL » : NULL est une pustule (qu’il faut éviter), plus formellement un marqueur d’attribut. Si un attribut est marqué NULL, alors il ne contient aucune valeur conforme à son type. En revanche on ne fonctionne plus alors selon le mode de la logique classique, binaire (vrai, faux), mais selon le mode de la logique ternaire (vrai, faux, n’iimporte quoi).
Voilà pour l’instant. Il reste pas mal de cas de figures à examiner : associations N-N, classes-associations, héritage, compositions et j’en oublie, mais voyons déjà si ce qui précède vous convient. Et si cela a pu vous apporter quelque chose, n’hésitez pas à voter
Partager