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

Requêtes PostgreSQL Discussion :

Récupérer le nom d'une table


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut Récupérer le nom d'une table
    Bonjour,

    dans ma base de données, j'ai une table User, et une table Superuser qui hérite de User (les deux partagent la même séquence comme clef primaire).

    Donc quand je vais chercher un utilisateur par sa clef primaire, je peux tomber sur un Superuser ou sur un User.

    Comment faire pour savoir si c'est un User ou un Superuser ?
    (en fait j'interroge la base via une API JAVA, et je voudrais tester si c'est un User ou Superuser et lancer une requête différente selon le type de table).

  2. #2
    Membre éclairé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Par défaut
    Le mieux serait peut etre de faire une vue avec les deux
    ou, si c'est ponctuel une requete genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select Type_Uti, user_name from
    (select 'User' Type_uti, user_id, user_name from User
    UNION
    select 'SuperUser' ,user_id, user_name from SuperUser) As SousReq
    WHERE user_id = ?
    Voilà pour une requete simple
    La vue contiendrait grosso modo ce qui se trouve entre parenthèse.

    Bon courage

    juva

  3. #3
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    J'ai remplacé les noms avec les noms de champ que j'utilise, mais Type_uti, c'est quoi ?

    En plus j'ai un autre soucis avec cette solution, je dois faire quelque chose de relativement générique, car je peux aussi avoir une table Overuser différente de Superuser, mais qui hérite aussi de User et partage la clef primaire. Voire une table Uberuser qui hérite de Superuser.

    Il me semble qu'il faut que je commence par envoyer une requête qui avec l'id me renvoie le nom de la table, là je ne suis pas certain que ça soit ce que fait la requête proposée (mais j'avoue je la comprend pas).


    J'ai mal expliqué mon besoin je pense (ou pas compris). Pour chaque table, j'ai une classe JAVA équivalente, et dans chaque classe j'ai un get qui appelle la base de donnée.
    Donc quand je fais un get avec User, je voudrais qu'il vérifie si ce n'est pas un Overuser ou un Superuser, auquel cas j'appellerais plutôt le get de mes classes Overuser et Superuser.

    Donc ce qu'il me faut, c'est pouvoir retrouver le nom de la table en base de données, pour que en Java j'appelle la bonne méthode get.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Citation Envoyé par ManusDei Voir le message
    Donc quand je vais chercher un utilisateur par sa clef primaire, je peux tomber sur un Superuser ou sur un User.

    Comment faire pour savoir si c'est un User ou un Superuser ?
    La solution standard est d'ajouter un champ type d'utilisateur dans la table User.

  5. #5
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Citation Envoyé par estofilo Voir le message
    La solution standard est d'ajouter un champ type d'utilisateur dans la table User.
    Malheureusement mon maitre de stage a bien précisé qu'il ne voulait pas de cette solution dans le cahier des charges.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Citation Envoyé par ManusDei Voir le message
    Malheureusement mon maitre de stage a bien précisé qu'il ne voulait pas de cette solution dans le cahier des charges.
    Ah. Pourtant l'héritage de tables n'est pas spécialement une fonctionnalité adéquate pour stocker des hiérarchies de classes.
    Mais si c'est imposé par le chef alors....

  7. #7
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Ah. Pourtant l'héritage de tables n'est pas spécialement une fonctionnalité adéquate pour stocker des hiérarchies de classes.
    Mais si c'est imposé par le chef alors....
    Tu utiliserais quoi pour stocker une hiérarchie de classes ? Sur ce point là, je peux négocier, je sais juste qu'il ne veut pas d'un champ type_user pour différencier les utilisateurs.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Il n'y a pas de méthode générale pour faire ça. Tu peux consulter l'article de wikipedia à ce sujet qui donne une idée de la problématique et de l'état de l'art en la matière:
    http://fr.wikipedia.org/wiki/Mapping_objet-relationnel

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/01/2010, 22h18
  2. Récupérer le nom d'une table à la volée
    Par JuJuLaTordue dans le forum SQL
    Réponses: 16
    Dernier message: 08/04/2008, 16h45
  3. Récupérer le nom d'une table
    Par Flo88 dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/03/2008, 14h43
  4. Récupérer le nom d'une table dans une fonction
    Par Milo59000 dans le forum SQL
    Réponses: 5
    Dernier message: 13/02/2008, 15h40
  5. Récupérer le nom d'une table
    Par romulus67 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 07/01/2008, 13h59

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