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 :

Inventaire livres bibliothèque personnelle


Sujet :

Schéma

  1. #61
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 127
    Points : 31 667
    Points
    31 667
    Billets dans le blog
    16
    Par défaut
    Bonjour almoa,

    Citation Envoyé par almoa
    Supposons par exemple que j’enregistre dans mon application une édition originale (e1) d’une œuvre française en grand format (GF). J’enregistre ses caractéristiques propres. Potentiellement une édition étrangère (e2) de cette œuvre (traduite du français vers une autre langue) peut exister (GF ou poche). De même potentiellement il peut exister une édition française de la même œuvre en poche (e3) ou alors en GF (e4) mais d’un autre éditeur. Il est alors important de distinguer deux cas de figure :

    a) Je possède une édition liée (e2 ou e3 ou e4) à e1 (1 % des cas) : cette édition doit être enregistrée avec toutes ses caractéristiques propres (titre, éditeur, année parution, contributeur…), comme c’est le cas de toutes les éditions possédées. A l’affichage dans l’application, il devra m’être signalé qu’il existe une édition liée possédée que je peux afficher à son tour.

    b) Je ne possède pas l’édition liée (e2 ou e3 ou e4) à e1 (99 % des cas) : lors de l’enregistrement de l’édition que je possède, il s’agit seulement de faire référence à l’édition liée (e2 ou e3 ou e4) en notant son titre (si différent : titre VO), éditeur et année de parution. Je trouve ces références dans l’édition possédée généralement dans la page mentionnant le copyright. A l’affichage de l’édition possédée, il sera fait mention desdites références.
    Cas (a) il faudrait donc créer e2, e3, e4 en tant qu’éditions non possédées et établir un lien entre e1 et ces éditions ;

    Cas (b) il faut donc créer e2, e3, e4 en tant qu’éditions possédées et établir un lien entre e1 et ces éditions.

    Ci-joint une vue d’une partie d’un MCD en cours d’élaboration. A vous de préciser ce qui ne va pas...

    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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 »)

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

  2. #62
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 393
    Points : 214
    Points
    214
    Par défaut
    Bonjour fsmrel,

    J'ai essayé de construire dans Looping la partie du MCD proposé. Le MLD généré est le suivant :

    Nom : 2024-12-21 15_23_03-Looping - [Biblio-Dec-2024.loo].png
Affichages : 7
Taille : 42,0 Ko

    et le script SQL est le suivant :

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    CREATE TABLE Ouvrage(
       OuvrageId SERIAL,
       OuvrageTitre VARCHAR(100)  NOT NULL,
       PRIMARY KEY(OuvrageId)
    );
     
    CREATE TABLE Editeur(
       EditeurId SERIAL,
       EditeurNom VARCHAR(100) ,
       PRIMARY KEY(EditeurId)
    );
     
    CREATE TABLE EditionType(
       EditionTypeId SERIAL,
       EditionTypeLibelle VARCHAR(100) ,
       PRIMARY KEY(EditionTypeId)
    );
     
    CREATE TABLE Format(
       FormatId SERIAL,
       FormatLibelle VARCHAR(100) ,
       PRIMARY KEY(FormatId)
    );
     
    CREATE TABLE Contributeur(
       ContributeurId SERIAL,
       ContributeurNom VARCHAR(100) ,
       PRIMARY KEY(ContributeurId)
    );
     
    CREATE TABLE ContributionType(
       ContributionTypeId SERIAL,
       ContributionTypeLibelle VARCHAR(100) ,
       PRIMARY KEY(ContributionTypeId)
    );
     
    CREATE TABLE Edition(
       OuvrageId INTEGER,
       EditionNumero SERIAL,
       AnneParution DATE,
       EditeurId INTEGER NOT NULL,
       PRIMARY KEY(OuvrageId, EditionNumero),
       FOREIGN KEY(OuvrageId) REFERENCES Ouvrage(OuvrageId),
       FOREIGN KEY(EditeurId) REFERENCES Editeur(EditeurId)
    );
     
    CREATE TABLE EditionNonPossedee(
       Id_EditionNonPossedee SERIAL,
       OuvrageId INTEGER NOT NULL,
       EditionNumero INTEGER NOT NULL,
       PRIMARY KEY(Id_EditionNonPossedee),
       UNIQUE(EditionNumero),
       FOREIGN KEY(OuvrageId, EditionNumero) REFERENCES Edition(OuvrageId, EditionNumero)
    );
     
    CREATE TABLE EditionPossedee(
       Id_EditionPossedee SERIAL,
       ISBN13 VARCHAR(13) ,
       EditionDateAchat DATE,
       FormatId INTEGER NOT NULL,
       OuvrageId INTEGER NOT NULL,
       EditionNumero INTEGER NOT NULL,
       PRIMARY KEY(Id_EditionPossedee),
       UNIQUE(EditionNumero),
       FOREIGN KEY(FormatId) REFERENCES Format(FormatId),
       FOREIGN KEY(OuvrageId, EditionNumero) REFERENCES Edition(OuvrageId, EditionNumero)
    );
     
    CREATE TABLE EdiEnfantFrancais(
       Id_EdiEnfantFrancais SERIAL,
       Id_EditionPossedee_SourceGrandFormatFrançais INTEGER NOT NULL,
       Id_EditionPossedee_EnfantDeParentFrançais INTEGER NOT NULL,
       PRIMARY KEY(Id_EdiEnfantFrancais),
       UNIQUE(Id_EditionPossedee_SourceGrandFormatFrançais),
       UNIQUE(Id_EditionPossedee_EnfantDeParentFrançais),
       FOREIGN KEY(Id_EditionPossedee_SourceGrandFormatFrançais) REFERENCES EditionPossedee(Id_EditionPossedee),
       FOREIGN KEY(Id_EditionPossedee_EnfantDeParentFrançais) REFERENCES EditionPossedee(Id_EditionPossedee)
    );
     
    CREATE TABLE EdiEnfantDeParentEtranger(
       Id_EdiEnfantDeParentEtranger SERIAL,
       Id_EditionPossedee_EnfantDeParentPasEnFrançais INTEGER NOT NULL,
       PRIMARY KEY(Id_EdiEnfantDeParentEtranger),
       UNIQUE(Id_EditionPossedee_EnfantDeParentPasEnFrançais),
       FOREIGN KEY(Id_EditionPossedee_EnfantDeParentPasEnFrançais) REFERENCES EditionPossedee(Id_EditionPossedee)
    );
     
    CREATE TABLE Referencer(
       Id_EditionPossedee INTEGER,
       Id_EditionNonPossedee INTEGER,
       PRIMARY KEY(Id_EditionPossedee, Id_EditionNonPossedee),
       FOREIGN KEY(Id_EditionPossedee) REFERENCES EditionPossedee(Id_EditionPossedee),
       FOREIGN KEY(Id_EditionNonPossedee) REFERENCES EditionNonPossedee(Id_EditionNonPossedee)
    );
     
    CREATE TABLE Edi_Type(
       Id_EditionPossedee INTEGER,
       EditeurId INTEGER,
       EditionTypeId INTEGER,
       AnneeParution DATE,
       PRIMARY KEY(Id_EditionPossedee, EditeurId, EditionTypeId),
       FOREIGN KEY(Id_EditionPossedee) REFERENCES EditionPossedee(Id_EditionPossedee),
       FOREIGN KEY(EditeurId) REFERENCES Editeur(EditeurId),
       FOREIGN KEY(EditionTypeId) REFERENCES EditionType(EditionTypeId)
    );
     
    CREATE TABLE Edi_Con(
       Id_EditionPossedee INTEGER,
       ContributeurId INTEGER,
       ContributionTypeId INTEGER,
       PRIMARY KEY(Id_EditionPossedee, ContributeurId, ContributionTypeId),
       FOREIGN KEY(Id_EditionPossedee) REFERENCES EditionPossedee(Id_EditionPossedee),
       FOREIGN KEY(ContributeurId) REFERENCES Contributeur(ContributeurId),
       FOREIGN KEY(ContributionTypeId) REFERENCES ContributionType(ContributionTypeId)
    );

    J'ai peut-être fait des erreurs dans la transcription du MCD :

    - La contrainte d'unicité porte sur "EditionNumero". Ne devrait-elle pas plutôt porter sur le couple (OuvrageId, EditionNumero) qui est déjà la clé primaire de la table [Edition] ?

    - J'ai du mal à comprendre la conception des tables [EdiEnfantFrancais] et [EdiEnfantDeParentEtranger]. Je voyais plus une colonne "Id_EditionPossedee_Parent" dans la table EditionPossedee (mais problème elle pourrait être NULL...)

    - La présence de "AnneeParution" dans la table [Edi_Type] ne serait-elle pas redondante car déjà présente dans la table [Edition] ?

    Par ailleurs, je ne suis pas sûr de saisir ce que recoupe la notion de "types d'édition" dans la table [EditionType].

    Merci par avance de votre éclairage.

Discussions similaires

  1. Mld pour inventaire livre
    Par cold-apok dans le forum Schéma
    Réponses: 1
    Dernier message: 25/09/2007, 02h42
  2. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 14h16
  3. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 16h35
  4. Réponses: 2
    Dernier message: 17/03/2002, 20h00

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