|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() |
Qui n'a jamais débattu avec un collègue sur l'utilité de l'utilisation ou non de clés étrangères dans le SGBD.
Ce nouvel article de sqlpro nous permet d'aborder ce sujet à partir de cas pratiques. http://sqlpro.developpez.com/article/fk-sql-vs-appli/ Et vous cet article vous a-t-il convaincu ?
__________________
Emmanuel Lecoester => On recrute des rédacteurs WinDev
|
|
|
10
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 620 ![]() |
Ça me rajeunit de 20 ans...
Dès que DB2 nous permit enfin d’assurer l’intégrité référentielle, je l’ai mise en œuvre d’office (c’était en 1988, et à l’époque aucun SGBD n’avait encore suivi les recommandations de Codd et de Date à ce sujet). Par contre, nombre de ceux qui la réclamaient à grands cris, se sont abstenus, trouvant tout à coup qu’elle pouvait poser a priori des problèmes de performance, mais sans qu'ils effectuent les travaux de prototypage ad-hoc... C’est du passé, mais il reste toujours quelques irréductibles, et ceux-là doivent avoir bien des orphelins dans leurs tables, même s’ils sont persuadés du contraire (j'ai pu m'en assurer, à coups d'audits...) A noter que le père du concept formel d’intégrité référentielle est — comme par hasard — Ted Codd (voyez Extending the Database Relational Model to Capture More Meaning).
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() ![]() David BARBARINInscription : août 2005 Messages : 4 137 ![]() |
Bon au contraire de fsmrel ca ne rajeunit pas de 20 ans ... j'étais encore trop petit à ce moment là
![]() Un très bon article comme d'habitude que devrait lire n'importe quel éditeur d'ERP. J'ai encore vu il y a un an une entreprise qui utilisait un ERP où aucune integrité référentielle au niveau base n'était implémenté et ceci sur DB2 .... C'était l'application qui gérait cela .... La conséquence ? Simple , une mauvaise qualité de données (doublons, enregistrements orphelins) ... et des problèmes de maintenance qui s'en suivent ... ++ |
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : septembre 2008 Messages : 101 ![]() |
Très bon argumentaire (en même temps, j étais déjà convaincu
Par contre, ce serait intéressant qu un "anti - FOREIGN KEY" défende son point de vue. |
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() |
Un article à distribuer auprès de mes collègues. Là je dois importer des données dans une base de données Firebird (qui accepte les contraintes FOREIGN KEY). Je n'ai aucune clé primaire, encore moins de clé étrangère.
Et cerise sur le gâteau : les index des tables sont enregistrées dans une table MAX_ID, avec un champ pour chaque table. La valeur de ces champs étant incrémentées à chaque INSERT .Je suis désespéré |
|
10
|
|
|
#6 |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 1 386 ![]() |
Snif, et le décisionnel alors
Un exemple pertinent où les FK sont gérées dans le code ? En effet, on "nettoie" les données dans l'ODS, et on capture les enregistrements défaillants ... |
|
00
|
|
|
#7 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 074 ![]() |
Salut,
Citation:
Dès lors il y a toujours un décisionnel clean et au pire on peut voir les lignes "défaillantes" en prévoyant des vues qui font l'UNION ALL des tables entre les deux bases.... Comme quoi il existe TOUJOURS une solution pour bien faire les choses ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
10
|
|
|
#8 | |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 1 386 ![]() |
Hello mr sqlpro !
Citation:
mais si on garde les rejets dans cette base tampon, tu es d'accord qu'il n'y a pas de FK sgbd sur cette base ? sinon adios les rejetos ... après au niveau perfs on a aussi tendance à virer les FK du coup chez nous ... c'est un cas particulier ( il faut dire que la bi c'est un peu particulier ) ...ou alors j'ai loupé un truc ... |
|
|
01
|
|
|
#9 | |
|
Membre chevronné
![]() Inscription : septembre 2003 Messages : 735 ![]() |
Citation:
Ne serais-ce que pour comprendre les schéma, ça me semble essentiel. |
|
|
|
01
|
|
|
#10 |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 1 386 ![]() |
Oui mais justement pour créer cette ligne bidon il ne suffit pas d'avoir une FK ... Il faut simuler la FK dans le code pour la créer, c'est ce qui est fait dans la plupart des ETL ...
|
|
00
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 620 ![]() |
Citation:
Pour comprendre les schémas (MCD) on représente les liens entre entités-types. Concernant les schémas (MLD), si on tire un lien c’est qu’on établit l’intégrité référentielle, et il n’y a pas lieu d’établir des clés primaires « bidons » servant de référence pour des clés étrangères « bidons » elles aussi.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
10
|
|
|
#12 | |
|
Membre chevronné
![]() Inscription : septembre 2003 Messages : 735 ![]() |
Citation:
Si une filiale intégrée ne stockait pas les titulaires, c'est la vie. Mais si on doit calculer l'augmentation des ventes, ça ne joue pas donc j'aurais tord d'avoir virer ces données car les chiffres seraient faux. On doit pouvoir choisir au cas par cas si l'impureté de ces données pose problème ou non. |
|
|
|
01
|
|
|
#13 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 620 ![]() |
Citation:
L’objectif reste bien d’avoir une base de données propre, décrite par un modèle pertinent. Quant à la doc, il n'est pas interdit de la maintenir à jour.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
00
|
|
|
#14 |
![]() ![]() |
Je pense que Jester parlait d'insérer dans une table client une ligne CLIENT INCONNU avec un code reconnaissable ('.' ou -1 par exemple) sur laquelle faire pointer du CA.
On reste alors dans une relation PK/FK classique, le CA est bien représenté dans les tableaux de bord des directeurs, et rien n'empêche une alimentation ultérieure de corriger la donnée. Personnellement au niveau du DWH, comme il s'agit d'un aggrégateurs de différentes sources les liens PK/FK sont primordiaux et même si je gère les rejets et recyclages dans une structure dédiée, je laisse les contraintes d'intégrité pour les raisons évoquées dans ce post. Dans les datamarts, alimentés exclusivement à partir de ce DWH, "forcément" les contraintes sont validées. Utilisant Oracle, j'ai suivi une de leur préconisation : déclarer les FK en DISABLE NOVALIDATE RELY. Je demande à Oracle de me croire sur parole et de faire comme si les FK étaient validées. Je gagne ainsi du temps à l'alimentation et je profite des optimisations en restitutions.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#15 |
|
Futur Membre du Club
![]() Développeur informatique Inscription : juillet 2006 Messages : 34 ![]() |
A propos de l'article, je trouve qu'on ne gagne rien à dire que celui qui n'utilise pas les contraintes référentielles est stupide. Ce n'est pas un argument sérieux.
Sans cela l'article aurait été parfait. |
|
|
10
|
|
|
#16 | |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 562 ![]() |
Citation:
![]() Sinon je suis convaincu de la nécessité des FK, j'ai d'ailleurs insisté pour que mon ancien employeur renonce à SQLite, même pour une petite application. Sur ce genre de base, il suffit généralement d'une ou deux requêtes SELECT avec un NOT IN(...) sur les tables les plus fréquemment affectées pour repérer une poignée d'enregistrements fautifs. Je suis également contre (et là je suis sûr que des gens seront pas d'accord) le fait de faire des vérifications dans le code client EN PLUS de celles faites par la base de donnée. Par exemple si je veux supprimer un Produit, j'envoie directement un DELETE et je réagis sur l'exception, les vérifications préalables sont lourdes à écrire, couteuses en performance et au final peu rassurantes et difficiles à maintenir. Enfin c'est mon avis. Autre chose : quelqu'un ici a déjà jeté un oeil au modèle de donnée utilisé par SAP?
|
|
|
|
20
|
|
|
#17 | |
|
Futur Membre du Club
![]() Inscription : mai 2005 Messages : 16 ![]() |
Citation:
Ce n'est peut être pas parfait, mais pour une petite appli. qui ne nécessite pas d'accès concurrent, cela peut du coup convenir. |
|
|
|
00
|
|
|
#18 |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 562 ![]() |
Juste mais je trouve que ça ressemble à un gros hack.
De plus, les mini SGBD embarqués qui tiennent la route sont assez nombreux, firebird embedded, mssql CE, VistaDb... La migration vers une architecture client-serveur au besoin aurait été simplifiée aussi. Ce n'était pas seule raison, il y a aussi les bizarreries au niveau des types et la tant vantée vitesse qui devenait toute relative sur les grosses tables... |
|
|
00
|
|
|
#19 |
|
Membre éclairé
![]() ![]() Inscription : janvier 2005 Messages : 325 ![]() |
Arrivées en 1992 avec la version 7 d'Oracle les FOREIGN KEYs ont fait faire un bond considérable à propos de la qualité des données et ont permis de réduire considérablement les programmes d'application. Ne pas les utiliser c'est retourner en arrière d'au moins 20 ans donc.
En version 6, Oracle autorisait la syntaxe FOREIGN KEY ... REFERENCES conscient qu'il fallait vraiment implanter le concept. MySQL fait de même avec les contraintes CHECK....... en 2009.... |
|
|
10
|
|
|
#20 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() François de Sainte MarieSpécialiste en bases de données Inscription : septembre 2006 Messages : 3 620 ![]() |
Citation:
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com