Salut,
Je me pose une question concernant la modélisation de ma base de données.
J'ai la classe personne, qui a deux sous classes employées et contacts.
est ce qu'il faut faire 3 tables ou une table comprenant tous les attributs des classes ?
Salut,
Je me pose une question concernant la modélisation de ma base de données.
J'ai la classe personne, qui a deux sous classes employées et contacts.
est ce qu'il faut faire 3 tables ou une table comprenant tous les attributs des classes ?
a priori, avec le peu de détails donnés, je dirais :
J'ai mis des attributs au pif pour donner un exemple
si employé et contact hérite de personne avec un héritage distinct (un employé n'est pas un contact).
- 3 tables : PERSONNE, EMPLOYE, CONTACT
- PERSONNE = { idPersonne, nomPersonne, prenomPersonne }
avec idPersonne en clé primaire
- EMPLOYE = { idPersonne, att11, att12,....}
avec idPersonne en clé primaire qui référence la clé primaire de PERSONNE.
- CONTACT = { idPersonne, att21, att22,....}
avec idPersonne en clé primaire qui référence la clé primaire de PERSONNE.
Tu auras donc 3 tables avec la même clé primaire.Ainsi tu pourras stocker dans PERSONNE des gens n'étant ni EMPLOYE ni CONTACT.
Attention, si une personne ne peut être à la fois contact et employé, et aussi, qu'il ne peut pas exister de personne n'étant ni employé ni contact, c'est différent !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE Personne (idPersonne NUMBER,nomPersonne VARCHAR(20),prenomPersonne VARCHAR(20)) CONSTRAINT pk_Personne PRIMARYKEY (idPersonne)) CREATE TABLE Employe (idPersonne NUMBER, att11 VARCHAR(20), att12VARCHAR(20), ....) CONTRAINT fk_Employe_Personne FOREIGN KEY (idPersonne) REFERENCES Personne(idPersonne)) CREATE TABLE Contact (idPersonne NUMBER, att21 VARCHAR(20), att22 VARCHAR(20), ....) CONTRAINT fk_Contact_Personne FOREIGN KEY (idPersonne) REFERENCES Personne(idPersonne))
Dans ce cas-là, il te faudra uniquement 2 tables :
- Employé = {idPersonne, nomPersonne, prenomPersonne, att11, att12, ...}
- Contact = { idPersonne, nomPersonne, prenomPersonne , att21, att22,...}
La 3ème solution, c'est également de ne faire qu'une table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE Employe (idPersonne NUMBER, nomPersonne VARCHAR(20),prenomPersonne VARCHAR(20), att11 VARCHAR(20), att12 VARCHAR(20), ....) CONTRAINT pk_Employe PRIMARY KEY (idPersonne) CREATE TABLE Contact (idPersonne NUMBER, nomPersonne VARCHAR(20),prenomPersonne VARCHAR(20), att21 VARCHAR(20), att22 VARCHAR(20), ....) CONTRAINT pk_Contact PRIMARY KEY (idPersonne)
- PERSONNE = {{idPersonne, nomPersonne, prenomPersonne, att11, att12, att21, att22,...}
Dans ce cas tu te trouveras avec des cases vides dans ta table, par exemple pour une Personne n'étant qu'employé et pas contact.
Au final, c'est donc à toi de choisir selon tes contraintes. Dans tous les cas, n'oublie pas que faire un diagramme de classe pour ses classes métier de dispense pas de faire un schéma distinct pour la base de données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE TABLE Personne (idPersonne NUMBER, nomPersonne VARCHAR(20),prenomPersonne VARCHAR(20), att11 VARCHAR(20), att12 VARCHAR(20), att21 VARCHAR(20), att22 VARCHAR(20), ....) CONTRAINT pk_Personne PRIMARY KEY (idPersonne)
Merci, je vais opter pour la solution des 3 tables, je pense que c mieux meme si cela complique un peu les requetes.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager