Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2011, 10h25   #1
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Par défaut A quoi sert l'outil Relation ?

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.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 11h20   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Bonjour,

Citation:
J'ai une question sur l'interêt de relier les tables d'une base à l'aide de l'outil Relation
Je vois 3 intérêts :
  • Appliquer l'intégrité référentielle entre tables
  • Construire directement les relations entre tables d'une requête dans le créateur de requête
  • Vérifier la structure d'une base de données en visualisant les relations
Dans ton cas, ce n'est en effet pas très utile.

a+

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 11h54   #3
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
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:
Appliquer l'intégrité référentielle entre tables
> L'intégrité référentielle, c'est quand on dit table A liée à table B avec "1 enregistrement de table A peut être lié à n enregistrements de table B" par exemple ? (si je reprends mon exemple, 1 personne peut être reliée à plusieurs appels)
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h15   #4
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Citation:
L'intégrité référentielle, c'est quand on dit table A liée à table B avec "1 enregistrement de table A peut être lié à n enregistrements de table B" par exemple ? (si je reprends mon exemple, 1 personne peut être reliée à plusieurs appels)
Non, l'intégrité référentielle permet d'appliquer une ou des règles à une relation existante pour qu'elle conserve une ou des cohérences.

Exemples selon les règles que j'active dans l'intégrité relationnelle :
  1. si je supprime un enregistrement dans la table mère, Access supprimera en cascade les enregistrements de la table fille qui sont liés à cet enregistrement pour ne pas laisser des enregistrements orphelins dans la table fille.
  2. si je change le Id d'un enregistrement de la table mère et cette id intervient dans la relation avec la table fille, Access mettra à jour automatiquement le Id des enregistrements liés de la table fille pour conserver la relation.
@+

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h16   #5
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
bonjour,

Citation:
Envoyé par debdev Voir le message
... ça fonctionne quand même ?
Que tu dis

Citation:
Envoyé par =debdev Voir le message
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).
La fenêtre Relation d’Access sert justement à poser la contrainte de clé étrangère (Foreign Key) et de permettre ainsi l’intégrité référentielle (ainsi que de paramétrer sa gestion avec les mises à jour/suppression en cascade).

Sans cela, rien ne garantit qu’un appel fasse référence à une personne existante (ligne orpheline dans la table Appels) :

Code :
1
2
3
4
5
6
7
8
9
10
11
Personne :
idPersonne	Nom
1		riri
2		fifi
3		loulou

Appel :
idAppel		DateAppel	idPersonne
1		28/12/2011	2
2		28/12/2011	4 <-- violation de l’intégrité référentielle
…
Quand on se prive de ce mécanisme, il faut prévoir au minimum le code (VBA) qui assurera l’intégrité référentielle à la place.

Code sql :
1
2
3
SELECT * FROM Appel A LEFT JOIN Personne P
ON A.idPersonne=P.idPersonne
WHERE P.idPersonne IS NULL;

Si cette requête retourne ne serait-ce qu’un enregistrement, c’est que la cata a déjà commencé
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h49   #6
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
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:
Si cette requête retourne ne serait-ce qu’un enregistrement, c’est que la cata a déjà commencé
> si ça retourne un(des) enregistrement(s), je n'ai qu'à les effacer, non ?

Qu'auriez vous fait dans mon cas ?
Quelle technique adopter pour maintenir l'intégrité référentielle ?
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 14h55   #7
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
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
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 15h43   #8
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Citation:
Je me souviens d'un thread enflammé sur le forum concernant l'intégrité référentielle, à rechercher et lire éventuellement
Je vais le chercher.

Merci en tout cas pour vos explications
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 15h12   #9
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 596
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 596
Points : 900
Points : 900
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.
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 16h28   #10
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
@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.
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h08.


 
 
 
 
Partenaires

Hébergement Web