OVH Cloud OVH Cloud

héritage en modele relationnel

2 réponses
Avatar
no-name2
Bonjour,

Pour mettre en place un principe d'héritage entre trois classes, j'ai
fait comme cela:

Personne
------------
id_personne
nom
prenom
categorie

Passager
--------------
id_personne
adresse

Personnel
------------
id_personne
entreprise

j'ai répéter, la clé primaire "id_personne" dans les deux classes dérivées.
L'attribut "categorie" contiendra soit la chaine de caractères
"Passager" soit "Personnel" ainsi on poura retrouver un élement d'une
des deux classes.ok ca marche.

Mais maintenant, si un Personnel devient un Passager ( parceque celui-ci
est en vacance et decide de voyager avec la même compagnie que celle
dans laquelle il travaille ) , il va y avoir une redondance.On aura par
exemple:

Personne
------------
..
..
14 Dubois Pierre Personnel
15 Dupuis Paul Passager
16 Dubois Pierre Passager <-- redondance
..
..

c'est problematique.Alors comment on fait?
On place les attributs "nom" et "prenom" dans les classes derivées?

2 réponses

Avatar
Michaël
Le 24.11.2003 18:12, no-name2 a écrit :
j'ai répéter, la clé primaire "id_personne" dans les deux classes dérivées.
L'attribut "categorie" contiendra soit la chaine de caractères
"Passager" soit "Personnel" ainsi on poura retrouver un élement d'une
des deux classes.ok ca marche.



Salut,

Je comprends pas très bien pourquoi tu ajoutes le champ "categorie" dans la
table "personnel". Un jointure directe (ou via un left/right join) entre la
table "personnel" et les tables dérivées, te donnera la liste des personnes
comprises (ou pas dans) les tables secondaires. C'est l'identifiant de la table
"personnel" qui sert de référence (clef primaire par exemple), dans les autres
tables, ce sont des clefs étrangères.

Cdt,
Michaël
Avatar
no-name2
supposons alors une nouvelle table "Courrier" qui represente
les courriers recu par la compagnie.
Un courrier pouvant etre envoyer soit par un "Passager" soit par un
"Personnel".
Donc , à un courrier donné, je vais pouvoir connaitre la "Personne"
qui me l'a envoyé mais en plus de ça, je pourrai aller cherché plus
d'informations sur elle en fonction de l'attribut "Catégorie", a savoir,
si c'est une "passager", où habite-il OU si c'est un "Personnel", dans
quel secteur travail-il. C'est un exemple..

Courrier
----------------
idCourrier
dateReception
Expediteur ----> idPersonne de la table Personne


Expediteur est un clé étrangère sur la clé primaire de idPersonne.Cela
pointe (en quelque sorte) sur un tuple de la table Personne.
Si on ne fait pas comme ca, il faudrait créer 2 tables "Courrier".
1 - Pour les courriers envoyés par les Passagers.
2 - Pour les courriers envoyés par les Personnels.

vous comprenez mon problême ? De plus je n'ai cité que 2 tables qui
heritent de "Personne" mais ils peut y en avoir beaucoup plus.




Michaël a écrit :
Le 24.11.2003 18:12, no-name2 a écrit :

j'ai répéter, la clé primaire "id_personne" dans les deux classes
dérivées.
L'attribut "categorie" contiendra soit la chaine de caractères
"Passager" soit "Personnel" ainsi on poura retrouver un élement d'une
des deux classes.ok ca marche.




Salut,

Je comprends pas très bien pourquoi tu ajoutes le champ "categorie" dans la
table "personnel". Un jointure directe (ou via un left/right join) entre la
table "personnel" et les tables dérivées, te donnera la liste des personnes
comprises (ou pas dans) les tables secondaires. C'est l'identifiant de
la table
"personnel" qui sert de référence (clef primaire par exemple), dans les
autres
tables, ce sont des clefs étrangères.

Cdt,
Michaël