Réaliser un domaine sémantique - Bases de données (MySql, Oracle, ...)

Nous allons voir comment créer un domaine sémantique avec une base de donnée (mysql, oracle ou autre).
Construction de la base qui sert d'exemple :
PHOTO (ID_PHOTO, ATT1, ATT2, ..., ATTn, STATUT) avec ID_PHOTO clef primaire.
Notation utilisée :
NomTable.Attribut désigne l'attribut "Attribut" appartenant à la table "NomTable"
Pour ceux qui sont encore là, nous allons définir ce qu'est un domaine sémantique.
Dans vos bases de données se trouvent surement des attibuts qui doivent avoir une valeur que le gestionnaire de la base aura prédéfinie. C'est à dire des attributs qui ne peuvent prendre pour valeur qu'un nombre limité de valeur.
Par exemple, vous gérez une base de photo, il est possible pour chaque photo qu'elle soit publique ou privée, pour cela l'attribut PHOTO.STATUT qui est une chaine de caractère peut prendre pour valeur "private" ou "public".
3 possibilités d'implémentations s'offrent à vous :
Créer une autre relation STATUT(ID_STATUT, LIBELLE) avec un identifiant et un libelle et créer dans PHOTO un attribut clef étrangère pointant sur ID_STATUT.
Mettre seulement l'attribut dans la relation PHOTO, et contrôler ces valeurs par le biais d'une contrainte de domaine, ou par un script php par la suite.
Utiliser la méthode expliquée dans ce billet, qui consiste a créer une relation STATUT(LIBELLE) avec seulement le libelle comme clé primaire. L'attribut PHOTO.STATUT pointera cette fois sur STATUT.LIBELLE. Il vous suffit ensuite de spécifié la clause "ON DELETE CASCADE ON UPDATE CASCADE" sur la clef étrangère (PHOTO.STATUT) et le tour est joué.
Avantages et Inconvénients :
1ère solution :
Avantages : Au niveau des mises à jour des valeurs, si jamais l'utilisateur désir changer le STATUT "private" en "privée" il suffit de mettre à jour la table STATUT et tous les tuples de PHOTO utilisant la valeur "private" seront changés.
Inconvénients : Cette méthode sous-entend une jointure entre les deux table pour connaître le STATUT de la PHOTO, une telle opération sur un attribut qui serait consulté fréquement sera dommageable pour la rapiditée de votre système.
2ème solution :
Avantages : Pas vraiment à part si vous êtes limité en nombre de table ce qui est très rare..
Inconvénients : Permet seulement un contrôle des valeurs insérer, le principe de MAJ évoqué précedement est absent et si une MAJ était désirée elle serait très contraignante pour l'administrateur de la base, puisqu'il devrait renommer tous les occurrences de PHOTO.STATUT visées.
3ème solution :
Avantages : Un accès direct à la valeur du STATUT de la photo par la table PHOTO, on évite ainsi une jointure.
Inconvénients : Pas vraiment
Au niveau des mises à jour des valeurs, si jamais l'utilisateur désir changer le STATUT "private" en "privée" il suffit de mettre à jour la table STATUT et tous les tuples de PHOTO utilisant la valeur "private" seront changés.
Les opérations qu'il faut effectuer pour tester cette méthode Modèle MySql:
On créer la table photo :
CREATE TABLE PHOTO
(ID_PHOTO INT(8) NOT NULL, NOM_PHOTO VARCHAR(50), STATUT VARCHAR(30), PRIMARY KEY ID_PHOTO, CONSTRAINT `FKP_PHOTO1` FOREIGN KEY (`STATUT `)
REFERENCES `STATUT `(`STATUT _LIBELLE`) ON DELETE CASCADE ON UPDATE CASCADE
)TYPE=INNODB;
On créer la table STATUTS :
CREATE TABLE STATUTS
(
STATUT_LIBELLE VARCHAR(30) NOT NULL,
primary key(STATUT_LIBELLE)
)TYPE=INNODB;
Et enfin on teste, en insérant des tuples puis en changeant ,ou en supprimant, une valeur dans STATUTS.
N'hésitez pas à laisser un commentaire !









0 commentaire sur "Réaliser un domaine sémantique - Bases de données (MySql, Oracle, ...)"
Ajouter un commentaire