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

  1. #1
    Membre à l'essai
    Selectionner les attributs d'une table et savoir si un attribut est une Clé primaire ou étrangére
    Bonjour la communauté,

    Je me demandais, s'il existe une table du système Firebird, qui contiendrait les informations suivantes sur une table donnée:
    1. Liste des attributs
    2. Si cet attribut est une clé Primaire ou pas, et si elle est une clé étrangére le nom de table de référence


    Et quelle serait la requête SQL adapté pour faire cette sélection

    Merci pour l'aide.

  2. #2
    Rédacteur/Modérateur

    Bonsoir,

    je ne comprends pas trop le mot attribut, je pense que vous voulez parler de colonnes c'est la table RDB$RELATION_FIELDS qu'il faut interroger
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    select * from rdb$relation_fields where rdb$relation_name='VotreTable';

    Pour ce qui est des contraintes de clés voir ce post et celui-ci
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre à l'essai
    Merci beaucoup pour votre aide Sergio,

    Oui, je voulais parler de colonnes en disant attributs

    Nc'est tout à fait vrai que la table RDB$RELATION_FIELDS, contient la liste de relations dans la base de données, Néanmoins la vue que j'aimerai avoir moi personellement, est composé de colonnes

    1. Nom_Table
    2. PK
    3. Is_referenced_In_Table
    4. FK
    5. Reffers_to_column
    6. In_Table


    C'est comme si on est sur FlameRobin Sur une table Click droit->> "Show propieties" -> "Constraints".

    Je nie pas qu'il peut y avoir des PK, qui ont référeence dans d'autre table, j'espére que je m'exprime bien avec le jargons Base de donées, comme je suis novice la dessus.

    J'ai chercher sur le net, je vois qu'il y a des gens qui font des scripts pour avoir des informations pareilles, mais je suis pas tombé sur un script qui me génére la vue que j'en ai vraiment besoin

  4. #4
    Rédacteur/Modérateur

    Bonjour
    Quelque chose comme ça devrait s'en rapprocher
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH S AS (SELECT g.RDB$INDEX_NAME,TRIM(RDB$RELATION_NAME) TBL,LIST(TRIM(g.RDB$FIELD_NAME)) FIELDS 
                      FROM RDB$INDEX_SEGMENTS g 
                      JOIN RDB$INDICES I ON I.RDB$INDEX_NAME=g.RDB$INDEX_NAME
                 GROUP BY 1,2)
     
    SELECT a.RDB$RELATION_NAME, a.RDB$UNIQUE_FLAG, S.FIELDS, 
      CASE COALESCE(a.RDB$FOREIGN_KEY,'P')
        WHEN 'P' THEN 'Primary'
        ELSE (SELECT 'FK ON TABLE '||s.TBL||' '||FIELDS FROM S WHERE S.RDB$INDEX_NAME=a.RDB$FOREIGN_KEY)
      END   
    FROM RDB$INDICES a JOIN  s ON a.RDB$INDEX_NAME=S.RDB$INDEX_NAME
    Where RDB$SYSTEM_FLAG=0
    ORDER BY a.RDB$RELATION_NAME,a.RDB$INDEX_ID


    je n'ai pas encore découvert comment distinguer une clé primaire d'un index dans cette séquence
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  5. #5
    Membre à l'essai
    ça s'approche bien à ce que je voulais, merci beaucoup, ça me serait utile certes.