|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 527 ![]() |
Bonjour,
J'ai une question sur l'interêt de relier les tables d'une base à l'aide de l'outil Relation. J'ai une table Global qui contient entre autres l'id de la personne (clé primaire). J'ai une table Appels qui contient entre autres l'id de l'appel (clé primaire) et l'id de la personne (clé étrangère). Ma table Global est alimentée via un csv importé. Ma table Appels est alimentée via un formulaire. Régulièrement (2 à 3 fois par semaine), ma table Global est supprimée entièrement (pas juste son contenu, la table elle memê). Elle est recréé lors de l'import du csv. Le problème est que vu qu'elle est supprimée, la relation entre la table Global et la table Appels est supprimée également. Et pourtant, quand je fais une requête (voir les appels de ma table Appels en affichant des variables de la table Global), ça fonctionne. Access réussit à faire le lien si je lui dis: TableAppels.CléEtrangère = TableGlobal.CléPrimaire. D'où ma question: quel est l'intérêt d'utiliser l'outil Relations vu que sans créer le lien entre les 2 tables, ça fonctionne quand même ? Merci pour vos éclaircissements. |
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Bonjour,
Citation:
a+ Philippe |
|
|
00
|
|
|
#3 | |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 527 ![]() |
Je te remercie pour ta réponse.
ça me rassure que ce ne soit pas indispensable, même si ça a son intérêt comme tu l'as expliqué. J'ai juste une question concernant Citation:
|
|
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Citation:
Exemples selon les règles que j'active dans l'intégrité relationnelle :
Philippe |
|
|
00
|
|
|
#5 | |||||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 415 ![]() |
bonjour,
Que tu dis Citation:
Sans cela, rien ne garantit qu’un appel fasse référence à une personne existante (ligne orpheline dans la table Appels) : Code :
Code sql :
Si cette requête retourne ne serait-ce qu’un enregistrement, c’est que la cata a déjà commencé
__________________
L'informatique fait son grand retour au lycée... |
|||||
|
00
|
|
|
#6 | |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 527 ![]() |
Merci pour vos explications, je comprends mieux maintenant l'interet.
Je n'avais effectivement pas pensé aux orphelins, même si je pense que la probabilité que j'en ai soit quasi nulle. En effet, le fichier csv qui alimente ma table Global est censé avoir des lignes ajoutées et pas des lignes supprimées. Par contre, il y a des lignes mises à jour. C'est la raison pour laquelle j'ai décidé de supprimer complètement la table puis de réimporter complètement le fichier csv, et pas de mettre à jour les champs éventuels et d'ajouter les nouvelles lignes. Citation:
Qu'auriez vous fait dans mon cas ? Quelle technique adopter pour maintenir l'intégrité référentielle ? |
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : avril 2006 Messages : 1 318 ![]() |
Prof' f-leb a tendance à dramatiser
.En pratique, je pense que si l'effort de gestion de tes tables pour assurer coûte que coûte une intégrité référentielle rarement mise à mal est élevé, ta solution est la bonne. De plus la bd semble limitée à deux tables non vitales pour l'entreprise. Sinon, rien ne t'empêche de vérifier par une requête, a postériori, que l'intégrité est là. En pratique, dans des cas particuliers comme l'import de données en masse d'une BD (sybase, sql server,...) je réalise l'import puis vérification éventuelle par requête. Je me souviens d'un thread enflammé sur le forum concernant l'intégrité référentielle, à rechercher et lire éventuellement. @+ Philippe |
|
00
|
|
|
#8 | |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 527 ![]() |
Citation:
Merci en tout cas pour vos explications |
|
|
|
00
|
|
|
#9 |
|
Membre émérite
![]() ![]() Conseil + Formation Inscription : février 2010 Messages : 596 ![]() |
Bonjour
Une autre solution est de mettre à jour la table côté 1 en chaînant 3 requêtes dans une macro : - ajout des nouveaux (basé sur une requête de non correspondance) - MAJ des communs sur les champs utiles et pouvant avoir évolué - suppression ou annotation des disparus (basé sur une requête de non correspondance) : dans le cas d'une suppression il faudra au préalable supprimer les enregistrements côté N ou bien avoir coché suppression en cascade dans la relation. |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 527 ![]() |
@78chris: merci pour ta proposition. au vu de ce qui a été dit, c'est probablement la solution à employer mais j'avoue que je ne la développerai pas pour le moment par manque de temps. Comme dit plus haut, la probabilité que des enregistrements soient à supprimer est très faible. Et comme il me reste bcp de boulot... je mets ça en priorité moins urgente.
Le but de mon post était de savoir l'intérêt de l'outil Relation, maintenant j'ai bien compris, donc merci à tous pour vos explications. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com