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

Langage SQL Discussion :

Présentation des metadonnés


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut Présentation des metadonnés
    J'utilise le principe des metas donnés pour mettre des renseignements sur mes utilisateurs.

    Sur ce principe http://sql.developpez.com/modelisation/metadonnees/#L2

    Une table Utilisateur, une table Renseignement, et une table intermédiaire contenant les donnés et les deux clés etrangeres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    CREATE TABLE Utilisateur
    (idutilisateur INTEGER,
     Nom VARCHAR(128),
     CONSTRAINT PK_MaTable PRIMARY KEY (idutilisateur))
     
    INSERT INTO Utilisateur (idutilisateur, nom) 
    VALUES (1, 'Albert')
    INSERT INTO Utilisateur (idutilisateur, nom) 
    VALUES (2, 'Bertrand')
    INSERT INTO Utilisateur (idutilisateur, nom) 
    VALUES (3, 'Cedric')
     
    CREATE TABLE Renseignement
    (idrenseignement INTEGER,
     Libelle VARCHAR(128),
     CONSTRAINT PK_MaTable PRIMARY KEY (idrenseignement))
     
    INSERT INTO Renseignement (idutilisateur, Libelle ) 
    VALUES (1, 'Adresse')
    INSERT INTO Renseignement (idutilisateur, Libelle ) 
    VALUES (2, 'Tel')
     
    CREATE TABLE UtilisateurRenseignement
    (idrenseignement INTEGER,
    idutilisateur INTEGER,
    InfoVARCHAR(128),
     CONSTRAINT PK_MaTable PRIMARY KEY (idrenseignement, idutilisateur))
     
    INSERT INTO UtilisateurRenseignement
    (idutilisateur, idrenseignement, Info ) 
    VALUES (1,1, ' 23 rue de la Paix')
    INSERT INTO UtilisateurRenseignement
    (idutilisateur, idrenseignement, Info ) 
    VALUES (1,2, ' 02 60 50 10')
    INSERT INTO UtilisateurRenseignement
    (idutilisateur, idrenseignement, Info ) 
    VALUES (2,1, '50 chemin fleuri')
    Et ca doit se présenter ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Nom  Adresse    Tel
    ----  --------- --------- 
    Albert   23 rue de la Paix    02 60 50 10
    Bertrand   50 chemin fleuri
    Cedric

    Comment faire ?

    Merci beaucoup

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Merci de respecter ceci :
    http://www.developpez.net/forums/showthread.php?t=944
    et donc de donner les script SQL de création des tables et d'insertion des données pour que l'on puisse vous aider.

    A +

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Oups pardon, voilà j'ai fait les modifications.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    CREATE TABLE Utilisateur
    (idutilisateur INTEGER,
     Nom VARCHAR(128),
     CONSTRAINT PK_MaTable PRIMARY KEY (idutilisateur))
     
    INSERT INTO Utilisateur (idutilisateur, nom) 
    VALUES (1, 'Albert')
    INSERT INTO Utilisateur (idutilisateur, nom) 
    VALUES (2, 'Bertrand')
    INSERT INTO Utilisateur (idutilisateur, nom) 
    VALUES (3, 'Cedric')
     
    CREATE TABLE Renseignement
    (idrenseignement INTEGER,
     Libelle VARCHAR(128),
     CONSTRAINT PK_MaTable3 PRIMARY KEY (idrenseignement))
     
    INSERT INTO Renseignement (idrenseignement, Libelle ) 
    VALUES (1, 'Adresse')
    INSERT INTO Renseignement (idrenseignement, Libelle ) 
    VALUES (2, 'Tel')
     
    CREATE TABLE UtilisateurRenseignement
    (idrenseignement INTEGER,
    idutilisateur INTEGER,
    Info VARCHAR(128),
     CONSTRAINT PK_MaTable2 PRIMARY KEY (idrenseignement, idutilisateur))
     
    INSERT INTO UtilisateurRenseignement
    (idutilisateur, idrenseignement, Info ) 
    VALUES (1,1, '23 rue de la Paix')
    INSERT INTO UtilisateurRenseignement
    (idutilisateur, idrenseignement, Info ) 
    VALUES (1,2, '02 60 50 10')
    INSERT INTO UtilisateurRenseignement
    (idutilisateur, idrenseignement, Info ) 
    VALUES (2,1, '50 chemin fleuri')
     
     
    SELECT U.*, 
           (SELECT Info
            FROM   UtilisateurRenseignement UR
            WHERE  idrenseignement = 1
              AND  UR.idutilisateur = U.idutilisateur) AS Adresse,    
           (SELECT Info
            FROM   UtilisateurRenseignement UR
            WHERE  idrenseignement = 2
              AND  UR.idutilisateur = U.idutilisateur) AS Tel
     
    FROM   Utilisateur U
     
     
     
    SELECT U.*, 
           (SELECT Info
            FROM   UtilisateurRenseignement UR
                   INNER JOIN Renseignement R
                         ON UR.idrenseignement = R.idrenseignement
            WHERE  Libelle = 'Adresse'
              AND  UR.idutilisateur = U.idutilisateur) AS Adresse,    
                  (SELECT Info
            FROM   UtilisateurRenseignement UR
                   INNER JOIN Renseignement R
                         ON UR.idrenseignement = R.idrenseignement
            WHERE  Libelle = 'Tel'
              AND  UR.idutilisateur = U.idutilisateur) AS Tel
     
    FROM   Utilisateur U

    A +

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Merci beaucoup de ta réponse, ainsi que les corrections du script de création de ma base.

    Mais néamoins, j'ai une question.

    Imaginons que j'ai pleins de renseignements. Chaque fois que j'en rajoute un dans la table, il faut que je modifie la requête.

    Comment faire pour la requête fonctionne quelque soit le nombre de renseignements ?

    Merci beaucoup

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Construire la requête dynamiquement.

    A +

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Comment faut-il faire ?

    Il faut faire du transact Sql ?
    Je suppose que tout dépend de la base de donnée ?

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Oui, cela dépend du SGBDR. Par exemple avec SQL Server c'est assez facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    CREATE PROCEDURE P_SELECT_ALL_RENSEIGNEMENTS
    AS
     
    DECLARE @SQL VARCHAR(8000)
     
    SET @SQL = 'SELECT U.*, '
     
    SELECT @SQL = @SQL + '(SELECT Info FROM UtilisateurRenseignement UR WHERE  idrenseignement = '
                       + CAST(idrenseignement AS VARCHAR(16)) + ' AND UR.idutilisateur = U.idutilisateur) AS '
                       + Libelle +', '
    FROM   Renseignement
     
    SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) -1) + ' FROM Utilisateur U '
     
    EXEC (@SQL)
     
    GO
     
    -- exécution de la proc
     
    EXEC P_SELECT_ALL_RENSEIGNEMENTS

    A +

Discussions similaires

  1. Présentation des nouveautés de Java 5.0 Tiger (J2SE 1.5)
    Par christopheJ dans le forum Langage
    Réponses: 43
    Dernier message: 30/09/2007, 18h38
  2. Logiciel de présentation des flux d'une BD.
    Par Orgied dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 20/07/2006, 10h56
  3. [MySQL] tableau HTML pour présentation des résultats de requêtes
    Par memel182 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 04/07/2006, 15h58
  4. ordre de présentation des résultats d'un état
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 30/09/2005, 20h12
  5. Réponses: 2
    Dernier message: 03/10/2002, 18h24

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