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. #41
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    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 : 389
    Points : 214
    Points
    214
    Par défaut
    Bonjour,

    Merci. J'ai complété le script avec l'insertion d'un recueil contenant deux œuvres anglaises traduites en français :
    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    CREATE TABLE ED_editeur(
       ED_ident INT AUTO_INCREMENT,
       ED_nom VARCHAR(128)  NOT NULL,
       PRIMARY KEY(ED_ident)
    );
     
    CREATE TABLE LG_langue(
       LG_ident INT AUTO_INCREMENT,
       LG_code_iso6392 CHAR(3)  NOT NULL,
       LG_libelle VARCHAR(50)  NOT NULL,
       PRIMARY KEY(LG_ident),
       UNIQUE(LG_code_iso6392)
    );
     
    CREATE TABLE CO_contributeur(
       CO_ident INT AUTO_INCREMENT,
       CO_nom VARCHAR(50)  NOT NULL,
       CO_prenom VARCHAR(50) ,
       PRIMARY KEY(CO_ident)
    );
     
    CREATE TABLE GE_genre(
       GE_indent INT AUTO_INCREMENT,
       GE_nom VARCHAR(50)  NOT NULL,
       PRIMARY KEY(GE_indent)
    );
     
    CREATE TABLE ET_etagere(
       ET_ident INT AUTO_INCREMENT,
       ET_nom VARCHAR(50)  NOT NULL,
       PRIMARY KEY(ET_ident)
    );
     
    CREATE TABLE FO_fonction(
       FO_ident INT AUTO_INCREMENT,
       FO_nom VARCHAR(25)  NOT NULL,
       PRIMARY KEY(FO_ident)
    );
     
    CREATE TABLE LG_langue(
       LG_ident INT AUTO_INCREMENT,
       LG_code_iso6392 CHAR(3)  NOT NULL,
       LG_libelle VARCHAR(50)  NOT NULL,
       PRIMARY KEY(LG_ident),
       UNIQUE(LG_code_iso6392)
    );
     
    CREATE TABLE OE_oeuvre(
       OE_ident INT AUTO_INCREMENT,
       OE_titre VARCHAR(128)  NOT NULL,
       LG_ident INT NOT NULL,
       PRIMARY KEY(OE_ident),
       FOREIGN KEY(LG_ident) REFERENCES LG_langue(LG_ident)
    );
     
    CREATE TABLE EO_edition(
       EO_ident INT AUTO_INCREMENT,
       EO_date DATE NOT NULL,
       EO_titre VARCHAR(128)  NOT NULL,
       OE_ident INT,
       ED_ident INT NOT NULL,
       LG_ident INT NOT NULL,
       PRIMARY KEY(EO_ident),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(ED_ident) REFERENCES ED_editeur(ED_ident),
       FOREIGN KEY(LG_ident) REFERENCES LG_langue(LG_ident)
    );
     
    CREATE TABLE RE_recueil(
       EO_ident INT,
       RE_titre VARCHAR(50)  NOT NULL,
       PRIMARY KEY(EO_ident),
       FOREIGN KEY(EO_ident) REFERENCES EO_edition(EO_ident)
    );
     
    CREATE TABLE EP_edition_possedee(
       EO_ident INT,
       EP_isbn VARCHAR(13)  NOT NULL,
       EP_resume VARCHAR(255)  NOT NULL,
       PRIMARY KEY(EO_ident),
       FOREIGN KEY(EO_ident) REFERENCES EO_edition(EO_ident)
    );
     
    CREATE TABLE EX_exemplaire(
       EO_ident INT,
       EX_seqn SMALLINT,
       EX_date_acq DATE NOT NULL,
       etat VARCHAR(50)  NOT NULL,
       PRIMARY KEY(EO_ident, EX_seqn),
       FOREIGN KEY(EO_ident) REFERENCES EP_edition_possedee(EO_ident)
    );
     
    CREATE TABLE TH_thematiser(
       OE_ident INT,
       GE_indent INT,
       PRIMARY KEY(OE_ident, GE_indent),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(GE_indent) REFERENCES GE_genre(GE_indent)
    );
     
    CREATE TABLE RG_ranger(
       EO_ident INT,
       EX_seqn SMALLINT,
       CA_date DATE,
       ET_ident INT NOT NULL,
       PRIMARY KEY(EO_ident, EX_seqn, CA_date),
       FOREIGN KEY(EO_ident, EX_seqn) REFERENCES EX_exemplaire(EO_ident, EX_seqn),
       FOREIGN KEY(ET_ident) REFERENCES ET_etagere(ET_ident)
    );
     
    CREATE TABLE AS_associer(
       EO_ident_enfant INT,
       EO_ident_parent INT,
       PRIMARY KEY(EO_ident_enfant, EO_ident_parent),
       FOREIGN KEY(EO_ident_enfant) REFERENCES EP_edition_possedee(EO_ident),
       FOREIGN KEY(EO_ident_parent) REFERENCES EO_edition(EO_ident)
    );
     
    CREATE TABLE CO_contenir(
       OE_ident INT,
       EO_ident INT,
       PRIMARY KEY(OE_ident, EO_ident),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(EO_ident) REFERENCES RE_recueil(EO_ident)
    );
     
    CREATE TABLE PA_participer(
       OE_ident INT,
       CO_ident INT,
       FO_ident INT,
       PRIMARY KEY(OE_ident, CO_ident, FO_ident),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(CO_ident) REFERENCES CO_contributeur(CO_ident),
       FOREIGN KEY(FO_ident) REFERENCES FO_fonction(FO_ident)
    );
     
    --Insertions
     
    insert into ED_editeur (ED_nom)
    values ('Gallimard')
         , ('Seuil')
         , ('Dargaud')
         , ('Viking Press')
    ;  
     
    insert into OE_oeuvre (OE_titre, LG_ident)
    values ('Notre-Dame de Paris', 1)
         , ('Le rouge et le noir', 1)
         , ('Astérix le Gaulois', 1)
         , ('La serpe d''or', 1)  
         , ('The Rotters'' Club', 2)  
         , ('The Closed Circle ', 2)  
    ;  
     
    insert into EO_edition (EO_date, EO_titre, OE_ident, ED_ident, LG_ident)
    values ('2020-06-25', 'Notre-Dame de Paris', 1, 1, 1)    -- Notre-Dame de Paris / Gallimard
         , ('2015-11-03', 'Le rouge et le noir', 2, 2, 1)    -- Le rouge et le noir / Seuil
         , ('2022-03-18', 'Notre-Dame de Paris', 1, 2, 1)    -- Notre-Dame de Paris / Seuil
         , ('1961-04-12', 'Astérix le Gaulois', 3, 3, 1)    -- Astérix le Gaulois / Dargaud
         , ('1962-06-01', 'La serpe d''Or', 4, 3, 1)    -- La serpe d'Or / Dargaud
         , ('1975-01-20', 'Asterix - T1&2', null, 3, 1) -- recueil / Dargaud
         , ('2001-06-01', 'The Rotters'' Club', 5, 4, 2)  -- edition VO Bienvenue au club
         , ('2002-06-01', 'Bienvenue au club', 5, 1, 1)  -- edition VF Bienvenue au club
         , ('2004-06-01', 'The Closed Circle ', 5, 4, 2)  -- edition VO Le cercle fermé
         , ('2006-06-01', 'Le cercle fermé', 5, 1, 1)  -- edition VF Le cercle fermé
         , ('2015-01-20', 'Les Enfants de Longbridge', null, 1, 1 ) -- recueil / Gallimard Bienvenue au club & Le cercle fermé 
    ;  
     
    insert into RE_recueil (EO_ident, RE_titre)
    values (6, 'Asterix - T1&2')
         , (11, 'Les Enfants de Longbridge')
    ;  
     
    insert into CO_contenir(OE_ident, EO_ident)
    values (3, 6)
         , (4, 6)
         , (5, 11)
         , (6, 11)
    ;
    Résultat de la requête d'affichage fournie dans le post #38 :

    titre recueil | EO_ident | edité le | éditeur | oeuvres contenues
    Asterix - T1&2 | 6 | 1975-01-20 | Dargaud | Astérix le Gaulois, La serpe d'or
    Les Enfants de Longbridge | 11 | 2015-01-20 |Gallimard | The Closed Circle , The Rotters' Club

    Selon vous, est-possible d'obtenir le résultat enrichi suivant ?

    titre recueil | EO_ident | edité le | éditeur | contenu du recueil
    Asterix - T1&2 | 6 | 1975-01-20 | Dargaud | Astérix le Gaulois (1961-04-12), La serpe d'or (1962-06-01)
    Les Enfants de Longbridge | 11 | 2015-01-20 |Gallimard | Bienvenue au club (2002-06-01) - VO (Anglais) : The Rotters' Club (2001-06-01), Le cercle fermé (2006-06-01) - VO (Anglais) : The Closed Circle (2004-06-01)

  2. #42
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 377
    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 377
    Points : 39 852
    Points
    39 852
    Billets dans le blog
    9
    Par défaut
    Oui c'est possible : la fonction GROUP_CONCAT permet en effet de concaténer plusieurs colonnes

    Exemple d'utilisation :

    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
     
    create table T1
          (  T1IDENT   integer  primary key
           , T1CHAR1   char(4)  not null
          )
    ;
    create table T2
          (  T1IDENT   integer  not null
           , T2SEQ     smallint not null
           , T2CHAR1   char(4)  not null
           , T2CHAR2   char(4)  not null
           , primary key (T1IDENT, T2SEQ)
          )
    ;
    insert into T1
    values (01, 'ABCD')
         , (02, 'POIU') 
         , (03, 'SDFG')
         , (04, 'ABCD')
    ;
    insert into T2
    values (01, 01, 'L001', 'eng')
         , (01, 02, 'L002', 'fra')
         , (01, 03, 'L003', 'eng')
         , (02, 01, 'TRUC', 'deu')
         , (02, 02, 'xXxX', 'fra')
         , (04, 01, 'AZER', 'fra')
         , (04, 02, 'TYUI', 'eng')
         , (04, 03, 'OPQS', 'deu')
    ;
    select T1.T1IDENT   
         , T1.T1CHAR1
         , group_concat(T2CHAR1, 
                        case when T2CHAR2 = 'deu' then '(allemand)'
                             when T2CHAR2 = 'eng' then '(anglais)'
                             when T2CHAR2 = 'fra' then '(français)'
                             else 'inconnu'
                        end 
                        separator ',') as libelle
    from       T1
    left join  T2
      on T2.T1IDENT = T1.T1IDENT
    group by T1.T1IDENT   
           , T1.T1CHAR1


    Résultat :

    Nom : Sans titre.png
Affichages : 111
Taille : 6,3 Ko


    Par contre je doute que ce soit possible directement sous MS Access.

  3. #43
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    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 : 389
    Points : 214
    Points
    214
    Par défaut
    Merci pour la fonction GROUP_CONCAT(). A la réflexion, mon application se basera plutôt sur le SGBDR MySQL.
    Je comprends la mise en œuvre de la fonction dans l'exemple que vous donnez. Mais je vous avoue que la mise en oeuvre dans un cas plus complexe tel que l'affichage enrichi recherché, décrit dans mon précédent message, me donne du fil a retordre. Je suis preneur, une fois de plus, de votre expertise et de vos précieuses recommandations.

  4. #44
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 377
    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 377
    Points : 39 852
    Points
    39 852
    Billets dans le blog
    9
    Par défaut
    Dans votre script, il y a quelques coquilles :
    • la table LG_langue est créée deux fois ;
    • la table LG_langue doit être alimentée préalablement à la table OE_oeuvre puisque l'identifiant de la langue est utilisé comme clef étrangère dans l'oeuvre
    • il manquait un blanc après "--" et avant le commentaire


    Après correction, voici un exemple de requête permettant de détailler le contenu de chaque recueil :

    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
    select   RE.RE_titre     as "Titre du recueil"
         ,   EO.EO_date      as "Édité le"
         ,   ED.ED_nom       as "Éditeur"
         ,   group_concat(OE.OE_titre, 
                          ' (', 
                          OX.EO_date,
                          ') ' 
                          separator ',') 
                             as "Contenu"
    from       RE_recueil  as RE
    inner join EO_edition  as EO
       on EO.EO_ident = RE.EO_ident
    inner join ED_editeur  as ED
       on ED.ED_ident = EO.ED_ident 
    inner join CO_contenir as CO
       on CO.EO_ident = RE.EO_ident
    inner join OE_oeuvre   as OE
       on OE.OE_ident = CO.OE_ident
    inner join EO_edition as OX
       on OX.OE_ident = OE.OE_ident
    group by  RE.RE_titre
          ,   EO.EO_date 
          ,   ED.ED_nom


    Et son résultat :

    Nom : Sans titre.png
Affichages : 102
Taille : 9,0 Ko


    Le script corrigé, incluant le chargement de la table des langues :

    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    CREATE TABLE ED_editeur(
       ED_ident INT AUTO_INCREMENT,
       ED_nom VARCHAR(128)  NOT NULL,
       PRIMARY KEY(ED_ident)
    );
     
    CREATE TABLE LG_langue(
       LG_ident INT AUTO_INCREMENT,
       LG_code_iso6392 CHAR(3)  NOT NULL,
       LG_libelle VARCHAR(50)  NOT NULL,
       PRIMARY KEY(LG_ident),
       UNIQUE(LG_code_iso6392)
    );
     
    CREATE TABLE CO_contributeur(
       CO_ident INT AUTO_INCREMENT,
       CO_nom VARCHAR(50)  NOT NULL,
       CO_prenom VARCHAR(50) ,
       PRIMARY KEY(CO_ident)
    );
     
    CREATE TABLE GE_genre(
       GE_indent INT AUTO_INCREMENT,
       GE_nom VARCHAR(50)  NOT NULL,
       PRIMARY KEY(GE_indent)
    );
     
    CREATE TABLE ET_etagere(
       ET_ident INT AUTO_INCREMENT,
       ET_nom VARCHAR(50)  NOT NULL,
       PRIMARY KEY(ET_ident)
    );
     
    CREATE TABLE FO_fonction(
       FO_ident INT AUTO_INCREMENT,
       FO_nom VARCHAR(25)  NOT NULL,
       PRIMARY KEY(FO_ident)
    );
     
    CREATE TABLE OE_oeuvre(
       OE_ident INT AUTO_INCREMENT,
       OE_titre VARCHAR(128)  NOT NULL,
       LG_ident INT NOT NULL,
       PRIMARY KEY(OE_ident),
       FOREIGN KEY(LG_ident) REFERENCES LG_langue(LG_ident)
    );
     
    CREATE TABLE EO_edition(
       EO_ident INT AUTO_INCREMENT,
       EO_date DATE NOT NULL,
       EO_titre VARCHAR(128)  NOT NULL,
       OE_ident INT,
       ED_ident INT NOT NULL,
       LG_ident INT NOT NULL,
       PRIMARY KEY(EO_ident),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(ED_ident) REFERENCES ED_editeur(ED_ident),
       FOREIGN KEY(LG_ident) REFERENCES LG_langue(LG_ident)
    );
     
    CREATE TABLE RE_recueil(
       EO_ident INT,
       RE_titre VARCHAR(50)  NOT NULL,
       PRIMARY KEY(EO_ident),
       FOREIGN KEY(EO_ident) REFERENCES EO_edition(EO_ident)
    );
     
    CREATE TABLE EP_edition_possedee(
       EO_ident INT,
       EP_isbn VARCHAR(13)  NOT NULL,
       EP_resume VARCHAR(255)  NOT NULL,
       PRIMARY KEY(EO_ident),
       FOREIGN KEY(EO_ident) REFERENCES EO_edition(EO_ident)
    );
     
    CREATE TABLE EX_exemplaire(
       EO_ident INT,
       EX_seqn SMALLINT,
       EX_date_acq DATE NOT NULL,
       etat VARCHAR(50)  NOT NULL,
       PRIMARY KEY(EO_ident, EX_seqn),
       FOREIGN KEY(EO_ident) REFERENCES EP_edition_possedee(EO_ident)
    );
     
    CREATE TABLE TH_thematiser(
       OE_ident INT,
       GE_indent INT,
       PRIMARY KEY(OE_ident, GE_indent),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(GE_indent) REFERENCES GE_genre(GE_indent)
    );
     
    CREATE TABLE RG_ranger(
       EO_ident INT,
       EX_seqn SMALLINT,
       CA_date DATE,
       ET_ident INT NOT NULL,
       PRIMARY KEY(EO_ident, EX_seqn, CA_date),
       FOREIGN KEY(EO_ident, EX_seqn) REFERENCES EX_exemplaire(EO_ident, EX_seqn),
       FOREIGN KEY(ET_ident) REFERENCES ET_etagere(ET_ident)
    );
     
    CREATE TABLE AS_associer(
       EO_ident_enfant INT,
       EO_ident_parent INT,
       PRIMARY KEY(EO_ident_enfant, EO_ident_parent),
       FOREIGN KEY(EO_ident_enfant) REFERENCES EP_edition_possedee(EO_ident),
       FOREIGN KEY(EO_ident_parent) REFERENCES EO_edition(EO_ident)
    );
     
    CREATE TABLE CO_contenir(
       OE_ident INT,
       EO_ident INT,
       PRIMARY KEY(OE_ident, EO_ident),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(EO_ident) REFERENCES RE_recueil(EO_ident)
    );
     
    CREATE TABLE PA_participer(
       OE_ident INT,
       CO_ident INT,
       FO_ident INT,
       PRIMARY KEY(OE_ident, CO_ident, FO_ident),
       FOREIGN KEY(OE_ident) REFERENCES OE_oeuvre(OE_ident),
       FOREIGN KEY(CO_ident) REFERENCES CO_contributeur(CO_ident),
       FOREIGN KEY(FO_ident) REFERENCES FO_fonction(FO_ident)
    );
     
    SELECT  'fin DDL'
    ;
    -- Insertions
    insert into ED_editeur (ED_nom)
    values ('Gallimard')
         , ('Seuil')
         , ('Dargaud')
         , ('Viking Press')
    ;  
    select 'ISR ED OK' ;
    insert into LG_langue (LG_code_iso6392, LG_libelle)
    values ('fra', 'français')
         , ('eng', 'anglais')
         , ('deu', 'allemand')
         , ('spa', 'espagnol')
    ;  
    select 'ISR LG OK' ;
    insert into OE_oeuvre (OE_titre, LG_ident)
    values ('Notre-Dame de Paris', 1)
         , ('Le rouge et le noir', 1)
         , ('Astérix le Gaulois', 1)
         , ('La serpe d''or', 1)  
         , ('The Rotters'' Club', 2)  
         , ('The Closed Circle ', 2)  
    ;  
    select 'ISR OE OK' ; 
    insert into EO_edition (EO_date, EO_titre, OE_ident, ED_ident, LG_ident)
    values ('2020-06-25', 'Notre-Dame de Paris', 1, 1, 1)    -- Notre-Dame de Paris / Gallimard
         , ('2015-11-03', 'Le rouge et le noir', 2, 2, 1)    -- Le rouge et le noir / Seuil
         , ('2022-03-18', 'Notre-Dame de Paris', 1, 2, 1)    -- Notre-Dame de Paris / Seuil
         , ('1961-04-12', 'Astérix le Gaulois', 3, 3, 1)    -- Astérix le Gaulois / Dargaud
         , ('1962-06-01', 'La serpe d''Or', 4, 3, 1)    -- La serpe d'Or / Dargaud
         , ('1975-01-20', 'Asterix - T1&2', null, 3, 1) -- recueil / Dargaud
         , ('2001-06-01', 'The Rotters'' Club', 5, 4, 2)  -- edition VO Bienvenue au club
         , ('2002-06-01', 'Bienvenue au club', 5, 1, 1)  -- edition VF Bienvenue au club
         , ('2004-06-01', 'The Closed Circle ', 5, 4, 2)  -- edition VO Le cercle fermé
         , ('2006-06-01', 'Le cercle fermé', 5, 1, 1)  -- edition VF Le cercle fermé
         , ('2015-01-20', 'Les Enfants de Longbridge', null, 1, 1 ) -- recueil / Gallimard Bienvenue au club & Le cercle fermé 
    ;  
    select 'ISR EO OK' ;  
    insert into RE_recueil (EO_ident, RE_titre)
    values (6, 'Asterix - T1&2')
         , (11, 'Les Enfants de Longbridge')
    ;  
    select 'ISR RE OK' ;   
    insert into CO_contenir(OE_ident, EO_ident)
    values (3, 6)
         , (4, 6)
         , (5, 11)
         , (6, 11)
    ;

  5. #45
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 377
    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 377
    Points : 39 852
    Points
    39 852
    Billets dans le blog
    9
    Par défaut
    Et la même avec ajout du code langue de l'œuvre, s'il est différent du code langue du recueil :

    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
    select   RE.RE_titre     as "Titre du recueil"
         ,   EO.EO_date      as "Édité le"
         ,   ED.ED_nom       as "Éditeur"
         ,   group_concat(OE.OE_titre, 
                          ' (', 
                          OX.EO_date,
                          case when LR.LG_ident <> LE.LG_ident
                               then concat (' ', LE.LG_code_iso6392)
                               else ''
                          end,
                          ') ' 
                          separator ', ') 
                             as "Contenu"
    from       RE_recueil  as RE
    inner join EO_edition  as EO
       on EO.EO_ident = RE.EO_ident
    inner join LG_langue   as LR -- langue du recueil
      on LR.LG_ident  = EO.LG_ident
    inner join ED_editeur  as ED
       on ED.ED_ident = EO.ED_ident 
    inner join CO_contenir as CO
       on CO.EO_ident = RE.EO_ident
    inner join OE_oeuvre   as OE
       on OE.OE_ident = CO.OE_ident
    inner join LG_langue   as LE -- langue de l'oeuvre
       on LE.LG_ident = OE.LG_ident
    inner join EO_edition as OX
       on OX.OE_ident = OE.OE_ident
    group by  RE.RE_titre
          ,   EO.EO_date 
          ,   ED.ED_nom


    Résultat :

    Nom : Sans titre.png
Affichages : 100
Taille : 8,6 Ko

  6. #46
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    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 : 389
    Points : 214
    Points
    214
    Par défaut
    Pour le script, désolé, je n´avais pas posté la bonne version me servant à effectuer mes tests.

    Pour le résultat obtenu, il est conforme en ce qui concerne le 1er recueil. Pour le second en revanche, l´affichage produit plusieurs fois le même titre (The Rotters' Club), au lieu du résultat attendu :

    titre recueil | EO_ident | edité le | éditeur | contenu du recueil
    Les Enfants de Longbridge | 11 | 2015-01-20 |Gallimard | Bienvenue au club (2002-06-01) - VO (Anglais) : The Rotters' Club (2001-06-01), Le cercle fermé (2006-06-01) - VO (Anglais) : The Closed Circle (2004-06-01)

    Qu´en pensez-vous ?

  7. #47
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 377
    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 377
    Points : 39 852
    Points
    39 852
    Billets dans le blog
    9
    Par défaut
    D'après le script que j'ai récupéré et adapté, le recueil "Les Enfants de Longbridge" contient (table CO_contenir) deux œuvres : la 5 (The Rotters' Club) et la 6 (The Closed Circle), mais la langue du recueil étant le français, il ne faudrait donc restituer que les titres en français. On peut éventuellement ne restituer que les titres de la version d'origine, mais en ce cas sans les titres en français, sinon on a l'impression que c'est un recueil de 4 œuvres.

    Quoi qu'il en soit, pour pouvoir faire la correspondance entre un recueil dans une langue et les œuvres d'origine dans une autre langue, il faut passer par [EP_edition_possedee] et l'association (associer).
    C'est peut-être là que le bât blesse : l'association n'étant établie que pour les œuvres possédées, on ne pourra pas détailler le contenu des recueils issus d'une traduction que si on les possède... Est-ce ce qui est souhaité ?
    Sinon il faut que l'association (associer) porte sur [EO_edition]et non plus entre EO et EP.

    Qu'en pensez vous ?

  8. #48
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    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 : 389
    Points : 214
    Points
    214
    Par défaut
    Je me suis imposé une remise à plat. Je vais distinguer selon que le recueil comprend des nouvelles ou qu´il comprend des romans.

    1- Recueil de nouvelles

    Je consulte l´édition d´un recueil que je possède et relève des informations devant figurer dans la base :

    - le titre français du recueil, sa date de publication VF et son éditeur VF
    - le cas échéant, le titre, date publication et éditeur du recueil VO
    - pour chaque nouvelle composant le recueil : le titre VF et le cas échéant le titre VO
    => je pars du postulat suivant pour les nouvelles : une nouvelle, prise isolément, ne fait pas l´objet en tant que telle d´une édition avec une date d´édition et un éditeur (comme c´est le cas d´un roman).Il peut parfois être précisé une date au regard de chaque nouvelle. Il s´agit alors de la date de création de l´oeuvre.

    2- Recueil de romans

    Dans l´édition que je possède, , je relève :

    - le titre français du recueil, sa date de publication VF et son éditeur VF
    - le cas échéant, le titre, date publication et éditeur du recueil VO
    - pour chaque roman composant le recueil : le titre VF et le cas échéant le titre VO, mais également la date de publication et l´éditeur (VF et VO le cas échéant). En effet, chaque roman du recueil a déjà fait l´objet d´une parution précédente en tant que mono-oeuvre, il est donc possible de relever toutes ces données (même cas de figure qu´une édition mono-oeuvre possédée avec des éditions parentes).

  9. #49
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 377
    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 377
    Points : 39 852
    Points
    39 852
    Billets dans le blog
    9
    Par défaut
    Bonjour Almoha

    Je ne vous ai pas oublié, mais j'ai moins de dispo que je le souhaiterais.

    Je suppose que vous pouvez posséder des recueils en langue étrangère et que l'édition originale peut parfois être la VF traduite dans une autre langue

  10. #50
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    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 : 389
    Points : 214
    Points
    214
    Par défaut
    Bonjour escartefigue,

    je ne possède que des recueils en langue française (ce sera toujours le cas, pour tous mes livres, recueils comme romans).

    Citation Envoyé par escartefigue
    l'édition originale peut parfois être la VF traduite dans une autre langue
    La réponse est donc non.

  11. #51
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 114
    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 114
    Points : 31 609
    Points
    31 609
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par almoha Voir le message

    je ne possède que des recueils en langue française (ce sera toujours le cas, pour tous mes livres, recueils comme romans).
    Jusqu'au jour où...

  12. #52
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    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 : 389
    Points : 214
    Points
    214
    Par défaut
    Citation Envoyé par fsmrel
    Jusqu'au jour où...
    Certes, mais la probabilité est infime. Si prévoir ce cas ne complexifie pas la modélisation, d'accord, sinon, me semble-t-il, le jeu n'en vaut pas la chandelle

  13. #53
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    389
    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 : 389
    Points : 214
    Points
    214
    Par défaut Poursuite du projet
    Bonsoir,

    Après une longue pause, je souhaite reprendre mon projet. Je rappelle et complète ci-dessous les types d’éditions que contiendra l’inventaire des livres que je possède et les caractéristiques à collecter. Puis j'évoque les œuvres comportant plusieurs tomes et je termine en précisant l'affichage attendu dans l'application devant être développée.

    I – Edition mono-œuvre

    1- Edition originale en français parue en grand format

     Les caractéristiques de base de cette édition (titre, éditeur, contributeur…) sont relevées. Pas d’édition(s) « parente(s) ».

    2- Edition originale en français parue en format poche

    a- Edition parue directement en format poche (donc non précédée d’une édition en grand format)
    => Les caractéristiques de base de cette édition (titre, éditeur, contributeur…) sont relevées. Pas d’édition(s) « parente(s) ».

    b- Edition parue en format poche précédée d’une édition en grand format
    => Les caractéristiques de base de cette édition (titre, éditeur, contributeur…) sont relevées. En outre, comme il existe une édition parente (l’édition en grand format), les caractéristiques de cette dernière sont à récolter. Elle sont visibles dans l’édition au format poche que je possède, dans les pages précédant le début de l’œuvre. Ces caractéristiques sont les suivantes : l’éditeur de l’édition en grand format et son année d’édition.

    3- Edition en français en grand format traduite à partir d’une édition originale en langue étrangère, quel que soit le format de cette dernière (grand format ou poche)

     Les caractéristiques de base de cette édition (titre, éditeur, contributeur…) sont relevées. En outre, comme Il existe une édition parente (l’édition étrangère), les caractéristiques de cette dernière sont à récolter. On les trouve dans les toutes premières pages de l’édition en français possédée : le titre, l’éditeur et l’année de l’édition étrangère.

    4- Edition en français au format poche traduite à partir d’une édition originale en langue étrangère, quel que soit le format de cette dernière (grand format ou poche)

     Les caractéristiques de base de cette édition (titre, éditeur, contributeur…) sont relevées. En outre, comme Il existe deux éditions parentes (l’édition étrangère et l’édition française en grand format), les caractéristiques de ces dernières sont à récolter : le titre, l’éditeur et l’année de l’édition étrangère ; l’éditeur de l’édition française en grand format et son année d’édition.

    5- Edition originale en langue étrangère

     S’il s’agit d’un grand format : récolte des caractéristiques de base
     S’il s’agit d’un format poche : récolte des caractéristiques de base ; récolte des caractéristiques de l’édition parente en grand format si elle existe.


    II – Edition recueil (plusieurs œuvres)

    Le recueil considéré en tant que contenant est une édition de type n° 1, 2, 3, 4 ou 5 (tels que décrits plus haut) dont les caractéristiques doivent être récoltées (titre, contributeurs, informations des éventuelles éditions parentes…)

    Quant au contenu, le recueil comprend des nouvelles ou de romans :

    1- Recueil de nouvelles
    Ces informations devront figurer dans la base : pour chaque nouvelle composant le recueil : le titre VF et le cas échéant le titre VO, le ou les contributeurs.
    => je pars du postulat suivant pour les nouvelles : une nouvelle, prise isolément, ne fait pas l´objet en tant que telle d´une édition avec une date d’édition et un éditeur (comme c´est le cas d´un roman).Il peut parfois être précisé une date au regard de chaque nouvelle. Il s’agit alors de la date de création de l´œuvre.

    2- Recueil de romans
    Ces informations devront figurer dans la base : pour chaque roman composant le recueil : le titre VF et le cas échéant le titre VO, mais également la date de publication et l’éditeur (VF et VO le cas échéant). En effet, chaque roman du recueil a déjà fait l´objet d´une parution précédente en tant que mono-œuvre, il est donc possible de relever toutes ces données et d’autres comme le contributeur (même cas de figure qu’une édition mono-œuvre possédée avec des éditions parentes).

    III – Œuvre composée de plusieurs tomes (édition mono-œuvre ou recueil)

    Une œuvre peut faire l’objet de plusieurs tomes. Chaque tome fait l’objet d’une édition (de type n° 1, 2, 3, 4 ou 5). Chaque édition (mono-œuvre ou recueil) est liée aux autres tomes au sein d’une unité que l’on peut qualifier de « cycle ».

    IV – Affichage attendu

    L’application d’inventaire (qui utilisera MySql ou PostgreSQL, cela reste à déterminer) devra être capable de restituer toutes les types d’édition. Elle comprendra :

    1- Une page « Liste »

    Exemples :

    [édition mono-édition de type n° 1]
    Titre : Dernières lueurs avant la nuit
    Éditeur : Flammarion
    Année édition : 2000
    Format : grand format
    Contributeur : Serge Brussolo (auteur)

    [édition de type mono-édition n° 2a]
    Titre : Au suivant de ces messieurs
    Éditeur : Fleuve noir
    Année édition : 1967
    Format : poche
    Contributeur : San Antonio (auteur) ; Frédéric Dard (auteur)

    [édition de type mono-édition n° 2b]
    Titre : Chien-Loup
    Éditeur : J’ai lu
    Année édition : 2019
    Format : poche
    Éditeur grand format (GF) : Flammarion
    Année édition GF : 2018
    Contributeur : Serge Joncour (auteur)

    [édition de type mono-édition n° 3]
    Titre : Lunar Park
    Éditeur : Robert Laffont
    Année édition : 2005
    Format : grand format
    Titre version originale (VO) : Lunar Park
    Éditeur VO : Alfred A. Knopf
    Année édition VO : 2004
    Contributeur : Bret Easton Ellis (auteur) ; Pierre Guglielmina (traducteur)

    [édition de type mono-édition n° 4]
    Titre : Carrie
    Éditeur : J’ai lu
    Année édition : 1996
    Format : poche
    Éditeur grand format (GF) : Gallimard
    Année édition GF : 1976
    Titre version originale (VO) : Carrie
    Éditeur VO : Doubleday
    Année édition VO : 1974
    Contributeur : Stephen King (auteur) ; Henri Robillot (traducteur)

    [édition mono-édition de type n° 5a]
    Titre : The Stephen King illustrated companion
    Éditeur : Fall River Press
    Année édition : 2009
    Format : grand format
    Contributeur : Bev Vincent (auteur)

    [édition mono-édition de type n° 5b]
    Titre : ‘Salem’s Lot
    Éditeur : NEL edition
    Année édition : 1977
    Format : Poche
    Éditeur grand format (GF) : Market edition
    Année édition GF : 1976
    Contributeur : Stephen King (auteur)

    [édition recueil de nouvelles (ex. : édition de type n° 3 )]
    Titre : 999 : le livre du millénaire des maîtres du fantastique
    Éditeur : Albin Michel
    Année édition : 1999
    Format : grand format
    Titre version originale (VO) : 999
    Éditeur VO : Avon Books
    Année édition VO : 1999
    Contributeur : Stephen King (auteur), Joyce Carol Oates (auteur), [… (auteurs)], Evelyne Châtelain (traducteur), [… (traducteurs)]

    [édition recueil de romans (ex. : édition de type n° 3 )]
    Titre : Les sept énigmes
    Éditeur : Presses de la cité
    Année édition : 1989
    Format : grand format
    Titre version originale (VO) : seven riddles
    Éditeur VO : Scott Meredith edition
    Année édition VO : 1988
    Contributeur : Manfred B. Lee (auteur) ; Frederic C. Dannay (auteur) ; Ellery Queen (auteur) ; Catherine Grégoire (traducteur) ; Jean Mactar (traducteur)

    [Œuvre comportant plusieurs tomes - édition de type mono-édition n° 3]
    Titre : Le jardin de la lune
    Cycle : Le livre des martyrs
    Cycle VO : Malazan Book of the Fallen
    Tome : 1
    Éditeur : Éditions LEHA
    Année édition : 2018
    Format : grand format
    Titre version originale (VO) : Gardens of the Moon
    Éditeur VO : Tor Books
    Année édition VO : 1999
    Contributeur : Steven Erikson (auteur) ; Emmanuel Chastellière (traducteur)

    [Œuvre comportant plusieurs tomes - édition de type mono-édition n° 3]
    Titre : Les Portes de la Maison des Morts
    Cycle : Le livre des martyrs
    Cycle VO : Malazan Book of the Fallen
    Tome : 2
    Éditeur : Éditions LEHA
    Année édition : 2018
    Format : grand format
    Titre version originale (VO) : Deadhouse Gates
    Éditeur VO : Tor Books
    Année édition VO : 2000
    Contributeur : Steven Erikson (auteur) ; Nicolas Merrien (traducteur)

    2- Une page « Détails »

    a) édition mono-édition => en cliquant sur le titre de l’édition, on affiche, outre les caractéristiques présentes dans la liste, des caractéristiques complémentaires (ISBN, date achat, genre…).

    b) édition recueil => en cliquant sur le titre de l’édition, on affiche, outre les caractéristiques présentes dans la liste et les caractéristiques complémentaires (ISBN, date achat, genre…), le détail des nouvelles ou romans contenus dans le recueil.

    [édition recueil de romans (ex. : édition de type n° 3 )]
    Titre : Les sept énigmes
    Éditeur : Presses de la cité
    Année édition : 1989
    Format : grand format
    Titre version originale (VO) : seven riddles
    Éditeur VO : Scott Meredith edition
    Année édition VO : 1988
    Contributeur : Manfred B. Lee (auteur) ; Frederic C. Dannay (auteur) ; Ellery Queen (auteur) ; Catherine Grégoire (traducteur) ; Jean Mactar
    Genre : policier
    Date achat : 2000
    Contenu :
    1- Titre : Le mystère du soulier blanc
    Éditeur : Club du Livre Policier
    Année édition : 1958
    Titre version originale (VO) : The Dutch Shoe Mystery
    Éditeur VO : Frederick A. Stokes edition
    Année édition VO : 1931
    2- Titre : Le mystérieux monsieur X
    Éditeur : Éditions de la nouvelle revue critique
    Année édition : 1961
    Titre version originale (VO) : The Chinese Orange Mystery
    Éditeur VO : Frederick A. Stokes edition
    Année édition VO : 1934

    […]

    c) Œuvre comportant plusieurs tomes => en cliquant sur le titre de l’édition possédée, on affiche, outre les caractéristiques présentes dans la liste et les caractéristiques complémentaires (ISBN, date achat, genre…), le nom du tome précédent (s’il existe) et celui du tome suivant (s’il existe).

    Je suis preneur de vos conseils pour poursuivre ma démarche de modélisation, bien aidé jusqu’à présent par escartefigue. Merci.

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