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

 SGBD Discussion :

analyseSI et cardinalité


Sujet :

SGBD

  1. #1
    Membre du Club
    analyseSI et cardinalité
    bonjour à tous,

    je pense être au bon endroit pour poster, je débute les cours de bases de données donc c'est encore très abstrait pour moi. je dois modeliser la BD d'une bibliothèque sous analyseSI et j'ai du mal a comprendre le fonctionnement des clés étrangères avec ce logiciel. j'ai une entité "livre" avec numéro_livre (la clé), titre, auteur etc.. une entité auteurs avec numéro_auteur (la clé), nom_auteur, prénom_auteur, etc... et une association entre les deux.

    le seul moyen que j'ai trouvé (enfin c'est ce qu'il me semble avec ma faible compréhension du sql) pour que analyseSI utilise la clé de l'entité "auteurs" pour l'attribut auteur de l'entité "livre" c'est de mettre la cardinalité a 0,1. mais si un auteur est dans l'entité auteurs c'est qu'il a écrit de 1 à n livres.

    je voudrais également dans l'autre sens que toutes les occurrences de l'entité "livre" écrites par un même auteur puissent être retrouvés sous forme de clés étrangères dans l’occurrence de l'entité auteur correspondante (en clair que chaque occurrence de l'entité auteur contienne la liste des livres qu'il a écrit) et la je ne vois vraiment pas comment faire (a part peut-etre créer une association qui soit associée à l'entité auteur et ne contenant que des clés d'entités livre?).

    merci d'avance!

  2. #2
    Rédacteur

    Citation Envoyé par aperikub Voir le message
    bonjour à tous,

    je pense être au bon endroit pour poster, je débute les cours de bases de données donc c'est encore très abstrait pour moi. je dois modeliser la BD d'une bibliothèque sous analyseSI et j'ai du mal a comprendre le fonctionnement des clés étrangères avec ce logiciel.
    C'est normal, les clef étrangères ne doivent en aucun cas apparaître dans un MCD. Ce sont les associations qui font le lien entre deux entités, association qui se transformerons en FK ou autre en fonction des cardinalité !

    A +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Expert éminent sénior
    Ce message n'a pas pu être affiché car il comporte des erreurs.

  4. #4
    Expert confirmé
    Citation Envoyé par aperikub Voir le message
    je voudrais également dans l'autre sens que toutes les occurrences de l'entité "livre" écrites par un même auteur puissent être retrouvés sous forme de clés étrangères dans l’occurrence de l'entité auteur correspondante (en clair que chaque occurrence de l'entité auteur contienne la liste des livres qu'il a écrit) et la je ne vois vraiment pas comment faire
    C'est ce qu'il ne faut surtout pas faire.
    Avec la table d'association EC_ecrire présentée ci-dessus par escartefigue vous pouvez récupérer par jointure toutes les informations nécessaires.

  5. #5
    Expert éminent sénior
    Bonjour,

    En complément : il est préférable de laisser analyseSI et passer à Looping (gracieusement proposé par le professeur Patrick Bergougnoux (merci Paprick !)) offrant bien plus de possibilités pour la modélisation des données.
    Faites simple, mais pas plus simple ! (A. Einstein)
    E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    Je ne réponds pas aux questions techniques par MP. Les forums sont là pout ça.
    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench

  6. #6
    Membre éprouvé
    Bonjour,

    Voici à quoi devrait ressembler votre MCD, le MLD correspondant et le code SQL permettant la génération du schéma relationnel.



    Bonne continuation !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  7. #7
    Membre du Club
    ok merci pour les réponses (j'ai mis un peu de temps a revenir, coupure internet ) du coups entretemps j'ai compris que analyseSI (que je suis obligé d'utiliser dans le cadre du cours) faisait les liens lui même donc mon mcd ressemble à vos exemples par contre au niveau SQL j'ai des **NOT_FOUND** pour les types des clés liées par des associations.
    voila mon mcd et le code SQL:






    ps: j'ai beaucoup hésité sur l'endroit ou mettre mon booléen "disponible" donc je ne suis vraiment pas sur que ce soit correct

  8. #8
    Expert éminent sénior
    Bonjour,

    Quelques remarques :

    Certains livres n'ont pas d'auteur connu, c'est pourquoi la cardinalité mini de zéro est requise, d'autres ont un ou plusieurs auteurs.

    Un livre peut rester à l'état de manuscrit ou devenir un ouvrage lorsqu'il est édité par un éditeur, le même livre pouvant être édité plusieurs fois (par un même éditeur ou plusieurs).
    Un ouvrage possède un identifiant ISBN obligatoire depuis 1970, mais les ouvrages anciens n'en ont pas
    Un même ouvrage est imprimé en plusieurs exemplaires, c'est l'exemplaire qui peut être emprunté par un lecteur et non le livre ou l'ouvrage. Dans les bibliothèques, chaque exemplaire possède un code à barres unique.

    Comme un lecteur doit pouvoir emprunter le même exemplaire plusieurs fois (si l'envie de relire lui prend) mais qu'un même exemplaire ne peut être emprunté qu'une seule fois à un instant "t", la date contribue à l'association "emprunter" et, dans le script, il faudra évacuer l'identifiant de l'emprunteur de la PK de cette table associative

    Un même lecteur peut être abonné dans plusieurs bibliothèques (c'est assez courant) mais il faut vérifier que l'emprunteur est membre de la bibliothèque, d'où la contrainte (CIF) d'inclusion (i cerclé)

    Enfin, j'ai choisi dans le MCD ci-dessous d'identifier l'ouvrage relativement au livre (sans livre, pas d'ouvrage) et l'exemplaire relativement à l'ouvrage (pour la même raison) : l'ouvrage comme l'exemplaire sont des entités-type faibles.

    Ce qui donne le modèle suivant :



    Note : le booléen "disponible O/N" est inutile. Un exemplaire est disponible s'il n'est pas emprunté (absent de la table associative "emprunter" ou bien la date de fin d'emprunt est échue)

    EDIT : de "exemplaire" vers "localiser" la cardinalité devrait être 0,1 t non 1,1. Tout exemplaire n'étant pas obligatoirement dans une bibliothèque

  9. #9
    Membre du Club
    merci bien, effectivement il y a moyen d'améliorer ma bd mais pour l'instant je cherche à rester simple et surtout à arriver à l'utiliser.

    j'ai buté sur le problème de version de java (obligé de rapasser a la v7), j'ai donc du passer d'analyseSI 0.80 à 0.75 (donc de changer la plupart de mes types au passage...)
    et maintenant que j'ai réussi à me connecter à ma source ODBC j'ai un message d'erreur d'analyseSI qui me dit qu'il n'arrive pas à créer les tables et ce même en essayant avec une bd simplissime ne contenant qu'une entité.

    je ne suis pas vraiment aidé par le fait que je n'ai aucune idée de ce que je suis en train de faire concrètement en utilisant ODBC ou en essayant exécuter mon code sql (je veux dire par la que je ne comprends pas vraiment sous quelle forme j'aurais accès à ma base de données)

  10. #10
    Expert éminent sénior
    Bonsoir aperikub,

    Les problèmes techniques liés à la version java, à la mise en œuvre des connexions ODBC ou toute autre contingence technique, ne doivent pas vous conduire à faire un MCD qui ne correspond pas à la réalité.

    Une fois les problèmes techniques résolus, n'importe quel MCD, après dérivation en MPD, produira un script exécutable sur votre environnement.

  11. #11
    Membre du Club
    je serai d'accord si ce n'était pas ma première tentative d'utilisation de base de données, je préfère rester sur quelque chose de très simple tant que je n'aurais pas réussi à créer ma première table. des idées sur l'origine du problème? (message d'erreur: "impossible de créer les tables. Pensez à vérifier que tous les types de données soit supportés par votre BDD."

    j'ai essayé d'enregistrer ma base de donnée vide sous toutes les versions d'access (2000, 2003 et actuelle), j'ai crée un mcd ne contenant qu'une entité avec un int comme clé, je ne vois pas d'ou cela peut venir. est-ce que ça pourrait etre une histoire de 32/64 bits? j'utilise l'outil d'administration ODBC en 64 bits (je ne peux pas me connecter avec la version 32)

  12. #12
    Expert éminent sénior
    pouvez-vous communiquer le script complet de création de cette table (ordre CREATE TABLE)

  13. #13
    Membre du Club
    voila:

  14. #14
    Modérateur

    aperikub, préférez une sortie textuelle afin que les scripts soient jouables par tous, contenue entre les balises CODE (#).

  15. #15
    Membre du Club
    j'ai voulu le faire mais lors de la copie du texte les retours à la ligne ne sont pas pris en compte

  16. #16
    Membre du Club
    voila:

    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
    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
    DROP TABLE IF EXISTS Livre ;
    CREATE TABLE Livre (ref_livre int AUTO_INCREMENT NOT NULL, 
    titre_Livre VARCHAR, 
    éditeur_Livre VARCHAR, 
    état_Livre ENUM, 
    date_achat_Livre DATE, 
    PRIMARY KEY (ref_livre) ) ENGINE=InnoDB;
     
    DROP TABLE IF EXISTS Liste_Auteurs ;
    CREATE TABLE Liste_Auteurs (ref_auteur int AUTO_INCREMENT NOT NULL, 
    prénom_Auteurs VARCHAR, 
    nom_Auteurs VARCHAR, 
    PRIMARY KEY (ref_auteur) ) ENGINE=InnoDB;
     
    DROP TABLE IF EXISTS Abonné ;
    CREATE TABLE Abonné (ref_abonné int AUTO_INCREMENT NOT NULL, 
    nom_Abonné VARCHAR, 
    prénom_Abonné VARCHAR, 
    PRIMARY KEY (ref_abonné) ) ENGINE=InnoDB;
     
    DROP TABLE IF EXISTS centre ;
    CREATE TABLE centre (numero_centre_centre int AUTO_INCREMENT(5) NOT NULL, 
    PRIMARY KEY (numero_centre_centre) ) ENGINE=InnoDB;  
     
    DROP TABLE IF EXISTS écrire ; 
    CREATE TABLE écrire (ref_auteur int AUTO_INCREMENT NOT NULL, 
    ref_livre INT NOT NULL, 
    PRIMARY KEY (ref_auteur,  
    ref_livre) ) ENGINE=InnoDB;  
     
    DROP TABLE IF EXISTS emprunt ; 
    CREATE TABLE emprunt (ref_abonné int AUTO_INCREMENT NOT NULL, 
    numero_centre_centre INT(5) NOT NULL, 
    ref_livre INT NOT NULL, 
    date_sortie DATE, 
    date_retour DATE, 
    PRIMARY KEY (ref_abonné,  
    numero_centre_centre,  
    ref_livre) ) ENGINE=InnoDB;
     
    DROP TABLE IF EXISTS localisation ; 
    CREATE TABLE localisation (ref_livre int AUTO_INCREMENT NOT NULL, 
    numero_centre_centre INT(5) NOT NULL, 
    disponible_localisation BOOL, 
    PRIMARY KEY (ref_livre,  
    numero_centre_centre) ) ENGINE=InnoDB;  
     
    ALTER TABLE écrire ADD CONSTRAINT FK_écrire_ref_auteur FOREIGN KEY (ref_auteur) REFERENCES Liste_Auteurs (ref_auteur); 
    ALTER TABLE écrire ADD CONSTRAINT FK_écrire_ref_livre FOREIGN KEY (ref_livre) REFERENCES Livre (ref_livre); 
    ALTER TABLE emprunt ADD CONSTRAINT FK_emprunt_ref_abonné FOREIGN KEY (ref_abonné) REFERENCES Abonné (ref_abonné); 
    ALTER TABLE emprunt ADD CONSTRAINT FK_emprunt_numero_centre_centre FOREIGN KEY (numero_centre_centre) REFERENCES centre (numero_centre_centre); 
    ALTER TABLE emprunt ADD CONSTRAINT FK_emprunt_ref_livre FOREIGN KEY (ref_livre) REFERENCES Livre (ref_livre); 
    ALTER TABLE localisation ADD CONSTRAINT FK_localisation_ref_livre FOREIGN KEY (ref_livre) REFERENCES Livre (ref_livre); 
    ALTER TABLE localisation ADD CONSTRAINT FK_localisation_numero_centre_centre FOREIGN KEY (numero_centre_centre) REFERENCES centre (numero_centre_centre);


    je vais me mettre sur un petit programme en java pour rétablir les retours à la ligne mais je n'ai pas encore vu la gestion de fichiers donc ça va prendre un peu de temps

  17. #17
    Modérateur

    Mettez la sortie sur notepad++, vous avez probablement des sauts de lignes LF (Unix/Linux/Mac) alors que sous Windows il vous faut des CR/LF.

    Au pire vous les remettez à la main ça vous prendra deux minutes.

    Edit : vous l'avez publié le temps de l'écriture de ce message, bien joué.

  18. #18
    Modérateur

    Bonjour,

    Dans un de vos posts, vous parlez d'Access
    En dehors du fait que ça ne semble vraiment pas un bon choix pour apprendre les SGBDR, il semble que vos scripts soient conçus pour MySQL (ENGINE=InnoDB;)
    Il faut donc spécifier le bon SGBDR cible pour que les scripts générés correspondent...

  19. #19
    Membre du Club
    je n'ai pas le choix des outils pour l'instant, ils sont imposés par le cours et doivent etre utilisés pour les tp à remettre

    si ça peut aider, voici le tuto d'analyseSI inclus dans le cours:

  20. #20
    Expert éminent sénior
    Dans le tuto, on voit en page 1 :

    Windows XP Pro., Ms Access 2007, MySQL 5.0.45 (avec WAMP5 1.7.4)
    Vous pouvez donc bien utiliser le script qui effectivement est prévu pour MySQL (ENGINE=INNODB comme l'a justement remarqué aieeeuuuuu)

    Par contre, c'est une version antédiluvienne, la dernière version étant la V8 !

###raw>template_hook.ano_emploi###