Bonjour,
Je me pose la question de la traduction au niveau logique d'un modèle conceptuel comportant des hierarchies.
Le sujet traité concerne la gestion d'itinéraires de randonnées avec les règles de gestions simplifiées suivantes :
Un itinéraire comprend des points d'intérêt (POI).
Un POI peut appartenir à un itinéraire.
Un itinéraire ou un point-d'interêt (POI) peuvent être décrits par des photos, et/ou des thèmes, et/ou des paysages et/ou des mots-clefs.
On peut attribuer des mots-clefs aux itinéraires, aux POI, aux photos et aux thèmes
Sans être persuadée que cela soit la meilleure solution, une des options de modélisation donne un MCD définissant des entités-types "abstraites" qui généralisent d'une part les objets décrits (qu'ils soient des itinéraires ou des POI), et d'autre part les "descripteurs" (mot-clefs, thèmes, photos, paysages).
Ces deux généralisations ont le mérite de donner un modèle conceptuel assez lisible (voir l'image jointe).
Il y a juste que je n'ai pas l'habitude de traduire ce type de modèle en modèle logique de données.
En plus de leurs liens de hiérarchie, les entités sous-types et les entités sur-types sont impliquées "individuellement" dans des associations. Ex. Motclef avec Photo et avec Theme, POI avec Itineraire.
Compte tenu de cela, est-ce un bon choix que de créer pour les sur-types deux relations, et d'identifier les sous-types par une clef primaire, en référence à la clé de ces sur-types ?
Voir l'exemple pour le descripteur et 2 de ses sous-types ci-dessous.
Est-ce la même chose que de dire que les relations sous-types ont une clef étrangère, id_descripteur, en référence à la clef primaire de la relation descripteur, et que cette clef étrangère constitue leur clef primaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE TABLE DESCRIPTEUR ( ID_DESCRIPTEUR INT NOT NULL , CONSTRAINT PK_DESCRIPTEUR PRIMARY KEY (ID_DESCRIPTEUR) ); CREATE TABLE MOTCLEF ( ID_DESCRIPTEUR INT NOT NULL , MOT char(32) NULL , CONSTRAINT PK_MOTCLEF PRIMARY KEY (ID_DESCRIPTEUR) ); CREATE TABLE THEME ( ID_DESCRIPTEUR INT NOT NULL , NOM_THEME char(32) NULL , CONSTRAINT PK_THEME PRIMARY KEY (ID_DESCRIPTEUR) );
Merci à tous de vos lumières,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 CREATE TABLE DESCRIPTEUR ( ID_DESCRIPTEUR INT NOT NULL , CONSTRAINT PK_DESCRIPTEUR PRIMARY KEY (ID_DESCRIPTEUR) ); CREATE TABLE MOTCLEF ( ID_DESCRIPTEUR INT NOT NULL , MOT char(32) NULL , CONSTRAINT PK_MOTCLEF PRIMARY KEY (ID_DESCRIPTEUR), CONSTRAINT FK_MOTCLEF FOREIGN KEY (ID_DESCRIPTEUR) REFERENCE DESCRIPTEUR (ID_DESCIPTEUR)); ); CREATE TABLE THEME ( ID_DESCRIPTEUR INT NOT NULL , NOM_THEME char(32) NULL , CONSTRAINT PK_THEME PRIMARY KEY (ID_DESCRIPTEUR), CONSTRAINT FK_THEME FOREIGN KEY (ID_DESCRIPTEUR) REFERENCE DESCRIPTEUR (ID_DESCIPTEUR)); );
Catcat
Partager