IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Traduire l'héritage conceptuel en script BDD [Entité-Association]


Sujet :

Schéma

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2002
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 233
    Points : 131
    Points
    131
    Par défaut Traduire l'héritage conceptuel en script BDD
    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 ?

  2. #2
    Membre éprouvé
    Avatar de Cian
    Inscrit en
    Août 2002
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 181
    Points : 983
    Points
    983
    Par défaut
    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.


    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))
    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 !
    Dans ce cas-là, il te faudra uniquement 2 tables :
    - Employé = {idPersonne, nomPersonne, prenomPersonne, att11, att12, ...}
    - Contact = { idPersonne, nomPersonne, prenomPersonne , att21, att22,...}


    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)
    La 3ème solution, c'est également de ne faire qu'une table :
    - 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.

    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)
    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

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2002
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 233
    Points : 131
    Points
    131
    Par défaut
    Merci, je vais opter pour la solution des 3 tables, je pense que c mieux meme si cela complique un peu les requetes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traduire l'héritage d'un MCD
    Par Agoudard dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2011, 00h26
  2. Utiliser script bdD existant dans pgadmin
    Par vvaness30 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/03/2007, 11h35
  3. Generer un script pour une BDD "*.sql"+"*.bat
    Par subzero82 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/08/2005, 16h47
  4. creation de script pour construire ma BDD sur un server
    Par Konrad Florczak dans le forum Outils
    Réponses: 2
    Dernier message: 04/08/2005, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo