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
    388
    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 : 388
    Points : 209
    Points
    209
    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 299
    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 299
    Points : 39 639
    Points
    39 639
    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 : 63
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
    388
    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 : 388
    Points : 209
    Points
    209
    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 299
    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 299
    Points : 39 639
    Points
    39 639
    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 : 55
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 299
    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 299
    Points : 39 639
    Points
    39 639
    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 : 56
Taille : 8,6 Ko

  6. #46
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    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 : 388
    Points : 209
    Points
    209
    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 299
    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 299
    Points : 39 639
    Points
    39 639
    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
    388
    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 : 388
    Points : 209
    Points
    209
    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 299
    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 299
    Points : 39 639
    Points
    39 639
    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
    388
    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 : 388
    Points : 209
    Points
    209
    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 091
    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 091
    Points : 31 510
    Points
    31 510
    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ù...
    (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.

  12. #52
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    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 : 388
    Points : 209
    Points
    209
    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

Discussions similaires

  1. Mld pour inventaire livre
    Par cold-apok dans le forum Schéma
    Réponses: 1
    Dernier message: 25/09/2007, 01h42
  2. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16
  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, 15h35
  4. Réponses: 2
    Dernier message: 17/03/2002, 19h00

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