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

PostgreSQL Discussion :

Droper une clé étrangere


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Droper une clé étrangere
    Bonjour, voilà j'ai une table :
    \d hl.imputation me donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
                 Table « hl.imputation »
     Colonne |          Type          | Modificateurs
    ---------+------------------------+---------------
     nom     | character varying(100) | non NULL
    Index :
        "imputation_pkey" PRIMARY KEY, btree (nom), tablespace « xxx»
    Référencé par :
        TABLE "hl.ticket" CONSTRAINT "ticket_fkey9" FOREIGN KEY (imputation) REFERENCES hl.imputation(nom)
    Tablespace : « xxx»
    j'essaie de faire une fonction qui me permets de supprimer tous les enregistrements de la table (à présent je ne peux pas parce que violation clé étrangère). comment y arriver à vider la table , la remplir et rentrer d'autres enregistrements... et remettre la contrainte clé etrangere...
    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    mettre en PK un varchar(100) est une très, très mauvaise idée.

    Si PG gueule sur un delete c'est normal.

    Pourquoi ne videz-vous pas dabord votre table ticket, ensuite imputation ?


    Sinon pour supprimer une foreign key il faut passer par un alter table.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci je vais modifier le pk du varchar vers le integer que je vais créer...(au fait pourquoi est ce une mauvaise idée?)

    Je ne peux vider la table ticket parce qu’elle contient des milliers d'enregistrement et est super sensible)....

    Je ne sais pas si en supprimant tous les triggers de ta table imputation ou ticket cela réglerai le problème mais après il faudrait que je les remette

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Ca n'est pas une bonne idée pour deux raison :
    - c'est contre performant.
    - c'est une clef non stable (prenez une fille par exemple qui se marie, son nom risque de changer).

    A lire : http://sqlpro.developpez.com/cours/clefs/



    Je ne peux vider la table ticket parce qu’elle contient des milliers d'enregistrement et est super sensible
    Beh dans ce cas, pourquoi vouloir vider la table imputation vu votre modèle physique de donnée ...?
    Vider la table imputation sans vider la table ticket n'a pas de sens vu la dépendance entre les deux.

    Si vous supprimez la contrainte sur la table ticket, que vous videz la table imputation, vous ne pourrez recréer cette contrainte qu'en étant sur que toutes les clef distinct presentent dans la table ticket son bien présentent dans la table imputation

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Certe il y a une dépendance entre les deux... en fait je voudrais changer l'ordre d'enregistrements (réorganiser après un événement souris) des valeurs de la table imputation et cela me pause des soucis à cause de la dépendance ....

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    qu'enttendez-vous par "ordre d'enregistrement" ?
    Il n'y a pas d'ordre dans une table sql, sauf si vous créez une colonne "ordre" qui sera faites pour ça

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Je m'explique. Dans ma table voila comment sont stocqué les enregistrements sur une colonne nom:

    toto
    titi
    toutou.

    L'utilisateur actionne une commande de tri (glisser deplacer en jquery) et voudrait que 'toutou' soit en premier dans la table et toto deuxieme (j'affiche mes enregistrement en ordre équivalent que ce qui est dans la base). donc j'ai besoin de soit faire un update pour renommer les données de la colonne nom soit vider ma table et reinserrer dans le nouvel ordre...
    je ne peux le faire à cause des dépendances....(ma table au au plus 5 enregistrement dont pas très couteux.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Ca n'a pas de sens.

    Cf :
    Il n'y a pas de notion d'ordre dans une table sql

    Ce qu'il vous faut, c'est une nouvelle colonne de tri dans votre table.
    Vous updaterez cette colonne et ferrez vos select en ajoutant un order by.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Je pense que vous avez raison mais c'est que je travaille avec une base qui existe déjà.. être si je commence à la modifier je ne sais pas jusqu’où iront les répercussions...

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Vu les méchanismes d'update / delete / insert d'un SGBD vous ne pouvez pas garantir un tri de la manière dont vous le pensé.


    Rien ne vous garantie qu'une ligne nouvellement insérée / updaté sera physiquement en fin de table.


    A partir de là vous n'avez que deux possibilités :
    - abandonner cette idée
    - vous appuyer sur une colonne de tri quelconque (date de maj, nouvelle colonne de tri spécifique)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci Punkoff résolu.

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

Discussions similaires

  1. ajout une clé étrangere : erreur 150
    Par 0redd dans le forum Débuter
    Réponses: 10
    Dernier message: 26/08/2009, 23h38
  2. Problème de Mapping d'une clé étranger
    Par lion13 dans le forum Hibernate
    Réponses: 6
    Dernier message: 06/05/2008, 10h39
  3. ajout d'une clé étrangere
    Par ronki dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 22/01/2008, 00h12
  4. Droper une sequence.
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 27/04/2005, 10h50

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