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

Langage SQL Discussion :

Les index pour FOREIGN KEY ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Par défaut Les index pour FOREIGN KEY ?
    Bonjour,

    Je souhaite mettre une clé étrangère pour faire un "ON DELETE CASCADE" mais il faut mettre un index apparemment - > voir la syntaxe

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ALTER TABLE matable2 
       ADD CONSTRAINT login_fk 
          FOREIGN KEY [id] login
             REFERENCES matable(login)
    En fait je n'arrive pas à comprendre à quoi sert l'index? faut-il le mettre au hasard? ( je ne pense pas ^^ ) !
    Il permet d'optimiser et de faire en sorte que lors d'une recherche l'index permet de séparer ( en quelque sorte ) la colonne de la table.

    Voilà ce que j'ai compris, c'est très très flou. Pouvez-vous m'éclairer et me conseiller sur l'index à choisir SVP.

    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faut mettre l'index sur la colonne qui porte la clef étrangère.
    En effet, lors d'un DELETE dans la table de référence, un DELETE sera également effectué sur la table utilisant cette référence.

    Sans index, ce DELETE fera un full table scan, alors qu'avec un index il pourrait l'utiliser.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Par défaut
    Pour les DELETE ça marche dans les deux sens? si je supprime de la table 1 ou de la table 2?

    Euh comment connaître l'index de ma référence? c'est la Cardinalité?

    Merci de l'aide

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Réfléchissez un peu!!!

    TABLE maitre : clef 1, 2, 3, 4, 5
    TABLE fille : clef étrangère 1, 1, 1, 2, 2, 5

    Si vous supprimez de la table fille une ligne, par exemple la première, s'il supprimait la clef 1 dans la table maître alors il devrait aussi supprimer toutes les valeurs de clef étrangère 1 dans la table fille. Ce qui reviendrait à dire :
    en supprimant une ligne de facture, je veut que tu me supprime la facture et toutes les lignes de la facture !!! Absurde non ?

    L'index se pose sur les colonnes de la clef étrangère (donc dans la table fille).

    Entre nous le mode CASCADE est à éviter. Préférez le mode SET NULL ou SET DEFAULT et nettoyez vos tables avec des batch aux heures creuses.


    Lisez ce que j'ai écrit sur la gestion de l'IR :
    http://sqlpro.developpez.com/cours/s...partie2#L7.3.2
    http://sqlpro.developpez.com/contrai...aintes_SQL.pdf
    paragraphe 5
    http://blog.developpez.com/sqlpro/p8...plexes-dans-l/


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 151
    Par défaut
    J'ai crée mon index dans ma table fille mais je ne sais toujours pas quoi mettre dans [id] de ma requête :s

    Pour le mode CASCADE je vais suivre ton conseil.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par vocal94130 Voir le message
    J'ai crée mon index dans ma table fille mais je ne sais toujours pas quoi mettre dans [id] de ma requête :s
    C'est un paramètre facultatif qui ne semble pas servir à grand chose.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Organiser les index pour quelle soit 1, 2, 3..
    Par CLion dans le forum SQLite
    Réponses: 8
    Dernier message: 02/03/2015, 16h58
  2. comment faire les clés étrangères "foreign key"
    Par geeksDeve dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/06/2011, 09h32
  3. Est ce que les Foreign keys sont indexées
    Par olibara dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/08/2009, 11h29
  4. pbm avec les foreigns keys.....
    Par j_bonc dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/06/2004, 10h23
  5. Foreign-key et indices/index
    Par mesquest dans le forum Outils
    Réponses: 3
    Dernier message: 21/05/2004, 14h22

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