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 :

aide MCD pour BDD livres


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : décembre 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut aide MCD pour BDD livres
    Bonjour,

    Je souhaite créer une petite base de données de livres, magazines et articles sur le jeu d'échecs et je suis complètement débutant dans la conception de BDD. Sur la base des articles parcourus sur ce site et ailleurs, une étape liminaire semble être la création d'un MCD. Dans celui que j'imagine, la table Ouvrage est centrale, les tables Auteur, Collection (suite de livres), Type (livre, magazine, article), Edition s'y rapportent directement.

    Dans un répertoire "Echecs" enregistré sur mon DD, j'ai une arborescence de dossiers et sous-dossiers jusqu'aux fichiers que je souhaite traduire dans ma BDD. Par exemple, dans la table Theme, je peux avoir quelques thèmes comme "Ouvertures", "Milieu de jeu", "Finales". Dans "Ouvertures", il y a "Début Fermé", "Début semi-ouvert" et "Début ouvert". Dans "Début semi-ouvert", plusieurs noms d'ouvertures, etc, jusqu'à mon fichier. Dans mon MCD, j'ai créé des relations "se rattacher à" entre un thème et un thème parent ("theme 1P"), ce même thème parent étant rattaché à thème parent supérieur ("theme 2P"), qui lui même à un ascendant "theme 3P" etc. Est-ce que je suis sur la bonne voie pour transcrire cette hiérarchie, sinon que proposez-vous comme MCD/MLD ?

    Merci pour vos conseils
    MCD créé avec mocodo online

    AUTEUR ( id, nom, prenom, annee_naissance )
    REDIGER UN ( id, id.1 )
    OUVRAGE ( id, titre, annee, ISBN10, ISBN13, id.1, id.2, id.3 )
    COLLECTION ( id, collection )
    TYPE ( id, type )
    EDITION ( id, num_edition, id.1 )
    EDITEUR ( id, nom_editeur )
    TRAITER D'UN ( id, id.1 )
    THEME ( id, theme, id.1 )
    THEME 1P ( id, theme, id.1 )
    THEME 2P ( id, theme, id.1 )
    THEME 3P ( id, theme )

    Nom : MCD_Ouvrages.jpg
Affichages : 107
Taille : 45,2 Ko

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 16 661
    Points : 33 677
    Points
    33 677
    Billets dans le blog
    13
    Par défaut
    Bonjour,
    Pour un débutant, ce n'est pas mal du tout !

    Par contre, pour la modélisation des thèmes et sous-thèmes, il convient de faire une association réflexive.

    Règle de gestion :
    Un (sous-)thème est fils d'un thème et un thème peut être parent d'un à plusieurs (sous-)thèmes.

    MCD :
    Thème -0,n----(parent)----|
    |----------0,1----(fils)---------|

    S'il y a plusieurs "étages" hiérarchiques, on peut alors mettre en oeuvre dans la base de données un arbre en représentation intervallaire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 417
    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 : 7 417
    Points : 23 885
    Points
    23 885
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    L'ISBN est un attribut facultatif lié à l'édition.
    Facultatif car il n'existe que depuis 1970 et qu'il n'est créé que pour les publications avec dépôt légal.
    Lié à l'édition, il est différent en fonction de l'éditeur et de la collection.
    On ne doit donc pas le rattacher directement à l'ouvrage rédigé par le ou les auteurs, mais à l'édition de cet ouvrage.

    Il y a une discussion récente ici sur ce sujet dans laquelle ces éléments sont expliqués

    Voici le modèle "type" d'une bibliothèque de prêt correspondant aux règles de gestion du sujet ci-dessus
    Nom : Sans titre.png
Affichages : 54
Taille : 53,0 Ko

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : décembre 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci CinePhil et escartefigue pour vos contributions.

    J'ai donc repris mon MCD pour arriver à celui ci-dessous :

    S'il y a plusieurs "étages" hiérarchiques, on peut alors mettre en oeuvre dans la base de données un arbre en représentation intervallaire.
    Voila pour moi un point dur. Le dossier racine comprend plus de 1500 fichiers et environ 300 dossiers, et 4 à 5 niveaux hiérarchiques (la structure n'est pas complètent figée), mon arbre est plutôt un baobab . Du coup, je cherche un algorithme pour remplir une table telle que présentée dans l'article (Représentation intervallaire des arborescences).
    Pour l'instant, comment je compte m'y prendre :
    - Etape 1 : Export de l'arborescence vers un tableau Excel (via Power Query) => Pas de problème
    - Etape 2 : Transformation du tableau pour mettre sous forme d'une table avec un identifiant (clé primaire) pour chaque dossier et fichier, et une colonne "parent" pour faire une autojointure de la table => A voir, ça peut être coton
    - Etape 3 : Utiliser la procédure de SQLpro procédure de dérécursivation pour transformer la table modélisée par auto-référence en table en mode intervallaire.

    Je me suis penché un peu à l'étape 3, malheureusement mes maigres connaissances en SQL ne me permettent pas de comprendre l'algorithme, je vise juste à bien le mettre en oeuvre. Pou l'instant, je n'y suis pas parvenu. J'ai copié collé le code dans MariaDB en mode console - j'ai juste changé le nom de la BDD "dbo" en "Parente", le nom de ma BDD - (après avoir changé le DELIMITER |), en terminant par | , j'ai une erreur de syntaxe retournée ERROR 1064 (42000). Peut-être y a-t-il eu des évolutions de syntaxe (le code date de 2004) ?

    Autre petite question, voila la définition de ma table T_EMPLOYE_EMP

    Une contrainte a été mise sur la colonne EMP_ID_CHEF : INT REFERENCES T_EMPLOYE_EMP (EMP_ID), mais je ne sais pas comment l'écrire. Ce n'est pas une contrainte de clé étrangère, s'agissant d'une seule et même table, non ?

    N'hésitez pas si vous avez des suggestions s'il y a plus simple, merci par avance pour votre aide.
    Images attachées Images attachées   

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 417
    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 : 7 417
    Points : 23 885
    Points
    23 885
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mango86 Voir le message
    Une contrainte a été mise sur la colonne EMP_ID_CHEF : INT REFERENCES T_EMPLOYE_EMP (EMP_ID), mais je ne sais pas comment l'écrire. Ce n'est pas une contrainte de clé étrangère, s'agissant d'une seule et même table, non ?
    Si, c'est tout à fait correct

    Voici un exemple de lien hiérarchique modélisé avec Looping et le script correspondant ici décliné pour MariaDB :

    Nom : Sans titre.png
Affichages : 53
Taille : 5,6 Ko

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE PE_personne(
       PE_ident INT AUTO_INCREMENT,
       PE_nom VARCHAR(50) NOT NULL,
       PE_prenom VARCHAR(50) NOT NULL,
       PE_ddn DATE NOT NULL,
       PE_ident_chef INT,
       PRIMARY KEY(PE_ident),
       FOREIGN KEY(PE_ident_chef) REFERENCES PE_personne(PE_ident)
    );

    EDIT : la collection doit être rattachée à l'édition.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 417
    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 : 7 417
    Points : 23 885
    Points
    23 885
    Billets dans le blog
    2
    Par défaut
    Un ouvrage peut être édité par un éditeur ou à compte d'auteur, par contre, la collection n'existe que chez un éditeur.
    Il faut donc vérifier que la collection de parution est bien une collection d'un éditeur ayant édité l'ouvrage.
    D'où la contrainte d'inclusion dans le modèle ci-dessous.

    Concernant l'ISBN, je ne pense pas qu'une édition puisse avoir les deux formats.
    Soit l'édition date d'avant 2007 et l'ISBN ne fait que 10 caractères, soit elle est plus récente et il en fait 13.
    Aussi, un seul attribut de type char(13) suffit (pour des raisons de performances, on se gardera d'utiliser du varchar pour une donnée aussi courte et dont la longueur effective ne bouge pas).

    Voici un extrait de MCD correspondant à la partie collection et édition

    Nom : Sans titre.png
Affichages : 54
Taille : 24,4 Ko

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : décembre 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci escartefigue pour vos remarques. Je propose ci-dessous un nouvel MCD qui les prend en compte.

    Un ouvrage peut être édité par un éditeur ou à compte d'auteur,
    Si je comprends bien, un ouvrage édité à compte d'auteur est traduit dans le MCD par la cardinalité 0 de l'association EDITER UNE, 01 EDITION, ?

    Pour créer une table intervallaire, je cherche à mettre en oeuvre la procédure de SQLpro procedure derecursivation mais sauf erreur de ma part, elle n'est pas compatible avec MariaDB.

    Savez-vous comment faire pour la rendre compatible niveau syntaxe ?

    Voici la description de table de départ (autoréférente) que j'ai créée, suite à l'ajout de la contrainte de clé étrangère sur EMP_ID_CHEF. J'ai inséré une cinquantaine de n-uplets pour tester.

    Merci par avance
    Nom : Show_create_table.png
Affichages : 49
Taille : 13,9 Ko
    Nom : MCD_Ouvrages_2.png
Affichages : 50
Taille : 28,9 Ko

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 417
    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 : 7 417
    Points : 23 885
    Points
    23 885
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mango86 Voir le message
    Si je comprends bien, un ouvrage édité à compte d'auteur est traduit dans le MCD par la cardinalité 0 de l'association EDITER UNE, 01 EDITION, ?
    Tout à fait

    Citation Envoyé par mango86 Voir le message
    Savez-vous comment faire pour la rendre compatible niveau syntaxe ?
    Je ne vois pas ce qui cloche dans la syntaxe, y a -t-il un message d'erreur

    Au passage, un datetime pour la date de naissance sera rarement utile, l'heure de naissance étant rarement connue et encore plus rarement utilisée, à vérifier dans votre cas.
    Également, tant que vos noms d'objets, tables, colonnes et autres, n'ont pas de caractères spéciaux et ne sont pas des noms réservés SQL, vous pouvez vous affranchir des quotes inversées, elles sont inutiles

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : décembre 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour escartefigue,

    Également, tant que vos noms d'objets, tables, colonnes et autres, n'ont pas de caractères spéciaux et ne sont pas des noms réservés SQL, vous pouvez vous affranchir des quotes inversées, elles sont inutiles
    En fait, je n'ai jamais inséré de quotes inversées, ma capture d'écran est ce que j'obtiens après la commande SHOW CREATE TABLE t_employe_emp;

    Au passage, un datetime pour la date de naissance sera rarement utile, l'heure de naissance étant rarement connue et encore plus rarement utilisée, à vérifier dans votre cas.
    Je travaille juste sur l'exemple donné ici, le type DATETIME a été mis à EMP_DATE_NAISSANCE :

    CREATE TABLE dbo.T_EMPLOYE_EMP
    (EMP_ID INT PRIMARY KEY,
    EMP_ID_CHEF INT REFERENCES T_EMPLOYE_EMP (EMP_ID),
    EMP_NOM VARCHAR(32) NOT NULL,
    EMP_DATE_NAISSANCE DATETIME);
    Je ne vois pas ce qui cloche dans la syntaxe, y a -t-il un message d'erreur
    Oui, j'ai fait un copié collé de la procédure, après avoir changé le délimiteur au préalable (DELIMITER |), j'ai un message d'erreur de syntaxe (voir ci-dessous). Si vous avez des idées car je ne vois pas comment progresser.

    Merci

    Nom : Fin_procedure_derecursivite.png
Affichages : 46
Taille : 23,7 Ko

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 417
    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 : 7 417
    Points : 23 885
    Points
    23 885
    Billets dans le blog
    2
    Par défaut
    il s'agit de SQL dynamique, pour débuger, il faut vérifier le contenu de chaque variable et afficher le contenu de la requête (il peut y avoir par exemple des erreurs lors de la concaténation, typiquement, des "nulls")

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : décembre 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Je mets le sujet en résolu car je pense que mon MCD est abouti et que je peux passer à la suite. Pour la suite (MLD) ou pour la procédure de transformation en table intervallaire, j'ouvrirai un nouveau sujet, je pense que ça sera plus clair comme ça. Merci pour votre aide.

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 417
    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 : 7 417
    Points : 23 885
    Points
    23 885
    Billets dans le blog
    2
    Par défaut
    hum, en relisant, je me rends compte que j'ai fait une coquille dans ma réponse n°7.
    Le pivot de la contrainte d'inclusion n'est pas l'éditeur, mais l'édition : on veut contrôler que l'ouvrage de la collection est bien associé à l'éditeur

    Le schéma est donc
    Nom : Sans titre.png
Affichages : 16
Taille : 19,9 Ko

    Selon qu'on a choisi que l'association EI_editer devient ou non une table, on adaptera le script de la contrainte

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : décembre 2014
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    C'est noté, voici ci-dessous mon MCD mis-à-jour.

    Nom : MCD_Ouvrages.png
Affichages : 7
Taille : 28,6 Ko

    Merci

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

Discussions similaires

  1. Aide réalisation MCD pour ent. de Transport
    Par blacksoul974 dans le forum Merise
    Réponses: 0
    Dernier message: 02/12/2016, 15h07
  2. Avis Mcd + de l'aide svp pour mon PFE
    Par link25000 dans le forum Modélisation
    Réponses: 3
    Dernier message: 24/06/2011, 17h59
  3. Réponses: 1
    Dernier message: 22/06/2011, 06h45
  4. Aide pour exercice livre "Apprendre à programmer en Python" par Swinnen
    Par reivilo1982 dans le forum Général Python
    Réponses: 4
    Dernier message: 28/02/2011, 12h35
  5. Votre Aide Pour Bdd
    Par DOUDOU91 dans le forum Access
    Réponses: 1
    Dernier message: 18/06/2006, 09h33

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