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

Oracle Discussion :

Contraintes


Sujet :

Oracle

  1. #1
    Membre régulier Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Points : 100
    Points
    100
    Par défaut Contraintes
    Bonjour,

    Sous oracle9i (OS Linux) je cherche à ajouter une contrainte a une table.
    J'ai une colonne id_a dans ma table A, et 2 colonnes id_b et id_pere dans ma table B (qui donne des relations pere-fils). Lors d'une nouvelle insertion dans A, je veux tester une requete, par exemple savoir si l'id de A a un pere dans B, du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exists(select * from B where id=(select id_pere from B where id=:new.id))
    j'ai lu que sous oracle 9i on ne peut pas faire de requetes dans une contrainte check. De plus je ne vois pas comment utiliser une contrainte ref sans ajouter une colonne correspondant au père dans B.

    Y a t-il une solution ?

    N'hesitez pas à demander plus d'infos si je n'ai pas été claire

    Merci d'avance

    calypso

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Les Foreigns keys sont faites pour ça a priori
    id doit alors être la PK de B et id_pere portera la FK

  3. #3
    Membre régulier Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    c'est-à- dire ajouter une FK dans A ? (vu que c'est sur cette table que porte la contrainte)
    Mais pour cela, je dois bien rajouter une colonne à A qui corresponde à l'id_pere non?

    merci !

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    je ne comprends pas le rapport en A et B

  5. #5
    Membre régulier Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    ex:

    table A:

    id (clé)
    --------
    toto
    albert
    jean


    table B

    id (clé) id_pere
    -----------------------
    toto Mr. dupont
    albert jean
    jean Mr. dupont
    guillaume toto


    -> je veux ajouter guillaume dans A. il existe deja une contrainte verifiant que guillaume existe dans B.
    -> je cherche à faire une contrainte qui teste si le père de guillaume (soit toto, et je sais qu'il existe) est dans A. Le but est de ne pouvoir insérer guillaume dans A que si toto est déjà présent...

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    la clé des 2 tables est le prénom ?

  7. #7
    Membre régulier Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    j'ai simplifié

    En réalité, la table A a 2 colonnes qui constituent la clé. (c'est une relation entre la table B et une autre table).
    La table B à en effet le prénom comme clé.
    Et les identifiants ne sont pqs des prénoms mais des chiffres. Disons que c plus simple d'utiliser toto

    calypso

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Evite la simplification parce que je n'arrive vraiment pas à saisir

    La solution sera de toutes façon soit dans une FK soit dans un trigger

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    d'apres ton exemple simplifié (peut etre un peu trop)
    PK sur B.id(cle) et FK sur A.id(cle) referençant B.id (cle).
    Avec la contrainte de FK tu ne pourra inserrer dans A que des id existant dans B

Discussions similaires

  1. Desactiver temporairement les contraintes
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/10/2006, 17h58
  2. [ contrainte ] supprimer une contrainte DB2
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 08/01/2004, 15h01
  3. Les contraintes OCL
    Par bart64 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 19/12/2003, 18h47
  4. Suppression de la contrainte unique
    Par mika dans le forum SQL
    Réponses: 3
    Dernier message: 20/02/2003, 17h56
  5. [VB6] Affichage d'image avec qlq contraintes
    Par youri dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h44

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