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

Diagrammes de Classes Discussion :

reflexion après lecture de cours sur la modélisation de bases de données


Sujet :

Diagrammes de Classes

  1. #1
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut reflexion après lecture de cours sur la modélisation de bases de données
    Je viens de terminer le lire des cours sur le SQL et la modélisation de bases de données.
    Pour m'entrainer, je voudrais modéliser une base de données représentant les animaux d'un refuge.

    je voudrais savoir laquelle de ces 2 modélisations et la meilleure.
    j'ai commencé par la modélisation 1. je pense qu'il peut y avoir beaucoup de redondances
    numéro 1 :
    Nom : uml refuge V0.jpg
Affichages : 102
Taille : 26,5 Ko

    La numéro 2 est beaucoup plus découpé, mais je ne suis pas sûr que ce soit non plus optimal.
    Par exemple pour le sexe de l'animal, la valeur pourrait être :
    mâle
    femelle
    inconnu
    il n'y a que 3 valeurs possibles. Finalement, la table Sexe ne contiendra que 3 lignes. Est-ce quand même une bonne solution ?

    numéro 2 :
    Nom : uml refuge V1.jpg
Affichages : 93
Taille : 40,1 Ko

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 191
    Points : 28 070
    Points
    28 070
    Par défaut
    Salut, je vais te donner mon avis, mais ce n'est que mon avis. Il ne vaut pas loi.

    En partant de ta 2nd modélisation:
    - Ok pour avoir une table vaccination. Il peut y avoir plusieurs vaccinations, les rappels, etc...
    - Ok pour la table Espèce. C'est une table commune, avec des données normalement prédéfinies, donc il est logique que ce soit une table à part entière.
    - Pour le sexe, j'aurais tendance à être du même avis que toi, pas forcément besoin d'une table.

    Pour le reste, ça se corse un peu.
    - Pour la couleur : Si tu fait appel à une liste de couleurs prédéfinies, communes à plusieurs animaux, etc... Une table est la bienvenue. Par contre, si la couleur est une caractéristique dont la saisie est totalement libre, pas forcément besoin d'une table. Mais ça peut complexifier par la suite les recherches, si tu veux en faire un critère de sélection. Dans ce cas, une table de couleurs prédéfinies peut être une meilleure solution.
    Donc ça dépend un peu de ce que tu compte faire, par la suite, de cette information.

    - FIV et Leucose : Tel que tu les a définis, de simple booleen, pas besoin d'une table, tu peux les intégrer directement à la table Animal.
    Maintenant, est-ce que ceux sont 2 données systématiquement pertinentes et renseignées pour tous les animaux ?
    Si ces données ne sont pas forcément pertinentes pour tous les animaux, sachant que ceux sont des maladies, sachant que potentiellement tes animaux peuvent avoir d'autres maladies aussi, on pourrait très bien imaginer une table d'association (à l'image de la table vaccination, mais sans la date) qui viendrait associer à l'animal, une ou plusieurs maladies dont ces 2, à partir d'une table de maladies prédéfinies (à l'image de la table vaccin).
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse. Voila ce que ça donne maintenant :

    Nom : uml refuge V2.jpg
Affichages : 78
Taille : 55,6 Ko

    Pour les associations entre les tables "Animal-Vaccination" et "Animal-Vermifugation", j'ai utilisé une composition. Si un animal est supprimé de la bdd, cela n'a plus de sens de conserver la date il a été vacciné.

    Je souhaite faire apparaitre l'espèce a laquelle l'animal appartient. j'ai utilisé un héritage pour ça. Mais il peux y avoir un grand nombre d'espèce différente. il ce peux qu'un jour un mouton soit trouvé perdu et arrive au refuge. Je ne sais pas a l'avance combien il peux y avoir d'espèce différente.
    Certaine espèce (ex les chats) ont des infos particulières. De plus les races de chiens sont différentes des races de chat. Du coup j'ai un peux de mal a voir comment ça va pouvoir fonctionner.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 084
    Points : 38 381
    Points
    38 381
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Un animal est associé à un genre. Par exemple Médor est un chien, minou un chat etc.
    Chaque genre est associé à des caractéristiques, donc un animal possède les valeurs pour les caractéristiques de son genre.
    Afin de vérifier qu'on associe les bonnes caractéristiques à un animal, je propose le modèle qui suit, dans lequel la contrainte d'inclusion vérifie ce point.
    Dans ce modèle, j'ai considéré que les employés pouvaient aussi être clients du cabinet vétérinaire.
    L'entité-type CAL_calendrier est dite "fictive", elle n'est ici que pour permettre à la date de contribuer à la PK de la table issue de l'association CAN_carac_ani. En effet, une valeur de caractéristique est mesurée à une certaine date.
    Et la flèche de cette association vers CAR_caracteristique, matérialise le fait que pour un animal et une date, il n'y a qu'une seule valeur pour une caractéristique.

    En formalisme entité-association, ça donne :

    Nom : MCD.png
Affichages : 58
Taille : 105,0 Ko

    Et en formalisme UML, ça devient :

    Nom : UML.png
Affichages : 61
Taille : 107,5 Ko

    Et le script correspondant (ici pour SQL server) :

    Code SQL : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    CREATE TABLE GEN_genre(
       GEN_ident INT IDENTITY,
       GEN_code CHAR(4) NOT NULL,
       GEN_libelle VARCHAR(50) NOT NULL,
       PRIMARY KEY(GEN_ident),
       UNIQUE(GEN_code)
    );
     
    CREATE TABLE PRS_personne(
       PRS_ident INT IDENTITY,
       PRS_nom VARCHAR(50) NOT NULL,
       PRS_prenom VARCHAR(50) NOT NULL,
       PRIMARY KEY(PRS_ident)
    );
     
    CREATE TABLE CLI_client(
       PRS_ident INT,
       PRIMARY KEY(PRS_ident),
       FOREIGN KEY(PRS_ident) REFERENCES PRS_personne(PRS_ident)
    );
     
    CREATE TABLE EMP_employe(
       PRS_ident INT,
       EMP_matricule CHAR(5) NOT NULL,
       EMP_dtemb DATE,
       PRIMARY KEY(PRS_ident),
       UNIQUE(EMP_matricule),
       FOREIGN KEY(PRS_ident) REFERENCES PRS_personne(PRS_ident)
    );
     
    CREATE TABLE CAR_caracteristique(
       CAR_ident INT IDENTITY,
       CAR_code CHAR(6) NOT NULL,
       CAR_libelle VARCHAR(50) NOT NULL,
       PRIMARY KEY(CAR_ident),
       UNIQUE(CAR_code)
    );
     
    CREATE TABLE ANI_animal(
       GEN_ident INT,
       ANI_seq SMALLINT,
       ANI_nom VARCHAR(50) NOT NULL,
       ANI_ddn DATE NOT NULL,
       PRS_ident INT NOT NULL,
       PRIMARY KEY(GEN_ident, ANI_seq),
       FOREIGN KEY(GEN_ident) REFERENCES GEN_genre(GEN_ident),
       FOREIGN KEY(PRS_ident) REFERENCES CLI_client(PRS_ident)
    );
     
    CREATE TABLE CGN_carac_genre(
       GEN_ident INT,
       CAR_ident INT,
       PRIMARY KEY(GEN_ident, CAR_ident),
       FOREIGN KEY(GEN_ident) REFERENCES GEN_genre(GEN_ident),
       FOREIGN KEY(CAR_ident) REFERENCES CAR_caracteristique(CAR_ident)
    );
     
    CREATE TABLE CAN_carac_ani(
       GEN_ident INT,
       ANI_seq SMALLINT,
       CAL_date DATE,
       CAR_ident INT NOT NULL,
       PRIMARY KEY(GEN_ident, ANI_seq, CAL_date),
       FOREIGN KEY(GEN_ident, ANI_seq) REFERENCES ANI_animal(GEN_ident, ANI_seq),
       FOREIGN KEY(CAR_ident) REFERENCES CAR_caracteristique(CAR_ident)
    );
     
    ALTER TABLE CAN_carac_ani
    ADD CONSTRAINT CAN_FK_001
    FOREIGN KEY(GEN_ident, CAR_ident)
    REFERENCES CGN_carac_genre(GEN_ident, CAR_ident);

    EDIT je précise que bien entendu, s'il existe des caractéristiques communes à tous les genres, elles trouveront leur place dans la classe [ANI_animal]

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/10/2010, 19h47
  2. modéliser une base de données sur SQL Server ..
    Par Alexy3171 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/11/2006, 16h57
  3. Cours sur la creation des bases et tables sous oracle
    Par boussaad dans le forum Oracle
    Réponses: 1
    Dernier message: 30/07/2006, 12h18
  4. Réponses: 5
    Dernier message: 21/10/2005, 23h25
  5. Réponses: 5
    Dernier message: 13/06/2005, 18h59

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