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

MS SQL Server Discussion :

Quel impact si on ne déclare pas la clé étrangère ?


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2012
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2012
    Messages : 293
    Points : 151
    Points
    151
    Par défaut Quel impact si on ne déclare pas la clé étrangère ?
    Bonjour,

    sur Sql Server j'arrive sans problème à faire des jointure en précisant simplement la liaison "table1.colonneA=table2.colonneA", tout ceci sans avoir déclaré ma colonne qui sera la clé étrangère avec le code ci dessous par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ALTER TABLE [dbo].[DETAILS_COMMANDES] ADD 
    	CONSTRAINT [FK_DETAILS_COMMANDES_COMMANDES] FOREIGN KEY 
    	(
    		[NO_COMMANDE]
    	) REFERENCES [dbo].[COMMANDES] (
    		[NO_COMMANDE]
    	)
    j'imagine que l'intérêt de la déclaration est lié à le performance de calcul, y'a t il d'autres intérêts ? ou risques à ne pas le faire ?

    merci de votre aide

  2. #2
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 723
    Points : 49 092
    Points
    49 092
    Billets dans le blog
    1
    Par défaut
    Une jointure n'a rien à voir avec l'intégrité référentielle. Vous pouvez faire des jointures sur tout et n'importe quoi.
    L'intégrité référentielle déclarative (donc la mise en place des clefs étrangères) est destiné à garantir l'intégrité de la base au regard de l'association formé entre une table fille et une table maître dont la référence (unique) doit exister.
    Que vaudrait une facture sans client ?

    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/ * * * * *

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2010
    Messages : 4 053
    Points : 7 271
    Points
    7 271
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Que vaudrait une facture sans client ?
    Pire, vu qu'une clé étrangère peut être nullable : que vaudrait une facture portant sur un client... inconnu !?
    On peut toujours imaginer qu'une facture sans client, c'est du emporté caisse, donc associé à un pseudo client fictif "caisse".
    Mais si on référencie le client 752688 et qu'il n'existe pas dans la table des clients, c'est la merde

    Et inversement, sans clé étrangères, ça veut dire qu'on peut supprimer sans vergogne et sans le moindre avertissement un client qui a des factures (à régler qui plus est tant qu'à faire).
    On ne jouit bien que de ce qu’on partage.

  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
    20 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 723
    Points : 49 092
    Points
    49 092
    Billets dans le blog
    1
    Par défaut
    Sans compter l'optimisation par les contraintes qui permettent, juste en mettant en place les FOREIGN KEYs de gagner énormément en performances ! (enfin sur les bons SGBD... Réellement relationnels... Exit donc MySQmerde par exemple !)

    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 éprouvé
    Homme Profil pro
    Directeur technique
    Inscrit en
    avril 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : avril 2006
    Messages : 259
    Points : 1 110
    Points
    1 110
    Par défaut
    MySQL gère très bien les clés étrangères

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    7 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2006
    Messages : 7 511
    Points : 28 648
    Points
    28 648
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par StringBuilder Voir le message
    sans clé étrangères, ça veut dire qu'on peut supprimer sans vergogne et sans le moindre avertissement un client qui a des factures (à régler qui plus est tant qu'à faire).
    Bien vu. Dans le même genre, histoire vécue : base de données d’une caisse de retraite. 780000 périodes de carrière de cotisants, mais avec référence à des cotisants inconnus... Gros travail de rattrapage et mise en oeuvre des clés étrangères !
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pout ça.

  7. #7
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 723
    Points : 49 092
    Points
    49 092
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Antjac Voir le message
    MySQL gère très bien les clés étrangères
    Non, mal, car l'optimiseur de MySQmerde ne sait pas s'en servir pour optimiser les requêtes. il fait donc la moitié du boulot par rapport à SQL server ou oracle....

    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/ * * * * *

  8. #8
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 723
    Points : 49 092
    Points
    49 092
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Pire, vu qu'une clé étrangère peut être nullable : que vaudrait une facture portant sur un client... inconnu !?
    On peut toujours imaginer qu'une facture sans client, c'est du emporté caisse, donc associé à un pseudo client fictif "caisse".
    Mais si on référencie le client 752688 et qu'il n'existe pas dans la table des clients, c'est la merde

    Et inversement, sans clé étrangères, ça veut dire qu'on peut supprimer sans vergogne et sans le moindre avertissement un client qui a des factures (à régler qui plus est tant qu'à faire).
    Je ne suis pas d'accord, une facture avec un client NULL est très pratique pour indiquer que l'on avait généré une facture mais qu'elle n'a pas fait l'objet d'un réel envoi. C'est le même cas qu'avec un facturier manuel papier, pour lequel les pages étaient numérotées et dans lequel en cas d'erreur on barrait la page sans envoyer la facture !

    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/ * * * * *

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    7 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2006
    Messages : 7 511
    Points : 28 648
    Points
    28 648
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Je ne suis pas d'accord, une facture avec un client NULL est très pratique pour indiquer que l'on avait généré une facture mais qu'elle n'a pas fait l'objet d'un réel envoi.
    Un null par ci, un null par là, c'est comme ça qu'on perdrait sans le savoir 780000 périodes de carrière... Fred, si tu étais mon fils, je te collerais une paire de baffes et tu filerais directement dans ta chambre, sous le regard approbateur de StringBuilder !
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pout ça.

  10. #10
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 723
    Points : 49 092
    Points
    49 092
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Un null par ci, un null par là, c'est comme ça qu'on perdrait sans le savoir 780000 périodes de carrière... Fred, si tu étais mon fils, je te collerais une paire de baffes et tu filerais directement dans ta chambre, sous le regard approbateur de StringBuilder !
    Oui, mais par rapport à toi, je suis un jeune con !!!!!

    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/ * * * * *

  11. #11
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    7 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2006
    Messages : 7 511
    Points : 28 648
    Points
    28 648
    Billets dans le blog
    16
    Par défaut
    Le temps ne fait rien à l'affaire...

    Citation Envoyé par l'ami Georges Brassens (RIP) :
    « Quand ils sont tout neufs, qu'ils sortent de l'oeuf, du cocon... »
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pout ça.

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

Discussions similaires

  1. Quel impact sur Hibernate ?
    Par Ousta1 dans le forum Hibernate
    Réponses: 27
    Dernier message: 31/01/2016, 18h54
  2. Réponses: 10
    Dernier message: 20/11/2007, 09h01
  3. [10g] catproc INVALID : quel impact ?
    Par isa06 dans le forum Oracle
    Réponses: 1
    Dernier message: 12/05/2006, 18h44
  4. Quel langage pour programme ne nécessitant pas d'install ?
    Par burnedsoul dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 09/03/2006, 19h23
  5. Impact de balles, trace de pas... Comment faire???
    Par supergrey dans le forum DirectX
    Réponses: 1
    Dernier message: 15/07/2004, 13h46

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