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

SQL Oracle Discussion :

Une question concernant les clés étrangères


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut Une question concernant les clés étrangères
    Bonjour à tous,


    J'ai une question concernant les clés étrangères. Considérons la table suivante:
    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
     
    CREATE TABLE equipe(
    ident_hierarchie        VARCHAR2(20),
    ident_equipe            VARCHAR2(20),
    ident_projet            VARCHAR2(20)
    . 
    . 
    . 
    /*
    j'ai mis ... car il y a beaucoup de colonnes qui ne sont pas 
    intéressantes pour cette question 
    */
    );
     
    ALTER TABLE equipe ADD CONSTRAINT PK_EQUIPE 
        PRIMARY KEY (ident_hierarchie, ident_equipe, ident_projet);
    J'ai besoin de référencer la colonne "ident_equipe" depuis une autre table. Le problème c'est que comme c'est indiqué dans la définition de la clé primaire, cette colonne en soi, n'est pas une clé (ça fait partie de la clé mais elle-même, seule, n'est pas une clé). En outre, la modélisation actuelle ne me permet pas de la déclarer comme UNIQUE. En conséquence, il n'est pas possible de créer une clé étrangère vers la colonne "ident_equipe" depuis une autre table.

    Ma question est donc, comment est-ce qu'on peut référencer cette colonne depuis une autre table? La solution que j'ai trouvée consistait à créer un trigger BEFORE INSERT et avant chaque insersion je vérifie si la valeur "ident_equipe" est parmi celles qui se trouvent déjà dans la table "equipe".

    Je voudrais savoir est-ce qu'il existe une solution plus simple et plus intéressante?


    Merci d'avance,


    Cordialement,
    Dariyoosh

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Créer une 3ème table IDENT avec ident_equipe comme PK
    Et contrainte référentielle entre equipe et indent, et aussi entre ta seconde table et ident.

  3. #3
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Citation Envoyé par McM Voir le message
    Créer une 3ème table IDENT avec ident_equipe comme PK
    Et contrainte référentielle entre equipe et indent, et aussi entre ta seconde table et ident.
    C'est exactement ce que je fais actuellement. J'ai une troisième table nommée "equipe_cle" qui contient une seule colonne "ident_equipe" comme clé primaire et qui est d'ailleurs une clé étrangère qui pointe vers "ident_equipe" de la table "equipe". J'ai créé un trigger BEFORE INSERT sur la table "equipe". Dès qu'on insère une ligne dans la table "equipe" la valeur de la colonne "ident_equipe" sera insérée aussi dans la table "equipe_cle". En outre, la clé étrangère de la table "equipe_cle" a été créée avec l'option "ON DELETE CASCADE" donc après chaque DELETE sur la table "equipe" normalement la ligne correspondante dans la table "equipe_cle" sera automatiquement supprimée.

    La table "equipe" est mise à jour régulièrement avec des données en masse (par SQL Loader). Ce qui m'inquiète c'est de savoir si un trigger et une clé étrangère sont suffisantes pour garantir la synchronisation entre les tables "equipe" et "equipe_cle"?

    Merci d'avance,

    Cordialement,

    Dariyoosh

Discussions similaires

  1. Une question concernant les RTS.
    Par kelepoc dans le forum C++
    Réponses: 3
    Dernier message: 14/02/2010, 16h51
  2. Réponses: 2
    Dernier message: 22/11/2009, 23h17
  3. Réponses: 1
    Dernier message: 27/08/2009, 21h45
  4. Réponses: 4
    Dernier message: 13/08/2009, 18h47
  5. Réponses: 2
    Dernier message: 29/07/2007, 11h48

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