[Access] Relation de tables

Fermé
alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007
- 5 juin 2007 à 10:39
Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014
- 5 juin 2007 à 20:38
Bonjour

je travail sur la réalisation d'une base de données.

J'ai crée les tables necessaires, ainsi que les clés étrangéres.

Pour resumer le contexte :

Entreprise et clients sont 2 tables differentes, ( question de pratique pour la futur programation ) mais en réalité, l'entreprise est aussi considéré comme un client ( donc entreprise et client = client )

un client peut avoir plusieur contrat, et un seul courtier
un courtier peut avoir plusieurs contrat a proposer.

voici les consignes que j'ai :

" Ta table "contrat" doit contenir une clé primaire "con_num", et trois clés étrangères : "clt_num", "ent_num", et "crt_num", avec une intégrité obligatoire sur "crt_num". Si il s'agit d'une entreprise, on mettra "0" dans "clt_num" ou (exclusif) "0" dans "ent_num". Pour respecter les intégrités référentielles, on créera des enregistrements vides dans chacune des tables "clients" et "entreprise". "

Bon pour les 3 clés étrangéres c'est fait. par contre, comment faire une " entité obligatoire sur " crt_num" ???

merci

3 réponses

Bonjour,
j'ai effectué quelques recherches pour tenter de résoudre ton problème car je n'ai jamais entendu parler d' "entité obligatoire" ...
Et malheureusement, elles n'ont aboutis à rien ! Peut être qu'elles n'étaient pas assez approfondies mais je ne comprends pas trop ce que tu demandes bien que je connaisse assez bien Access.
Essaies d'être plus explicite pour orienter nos réponses.
0
alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007

5 juin 2007 à 11:32
et bien au depart, pour faciliter les choses, j'avais consideré sous access, que entreprise et client, seraient reunis dans une seule et même table : Client

j'avais fais ca, car je pensais que en mettant une table client particulier, a part, il y aurait des soucis pour la recherche a cause des homonyme et car en faisant ce schéma relationel on avait l'impression que " un client appartenait a une entreprise ", chose bien sur totalement érroné car on a dit plus haut qu'une entreprise, était juste un client.

Donc, aprés avoir expliqué ca a celui qui supervise mon projet, il m'a repondu ceci :

" Je ne vois pas où il peut y avoir un problème en séparant différenciant les tables "clients" et "entreprise", outre la relation sur la table "contrat" qui n'est pas un problème en soit. Je m'explique un peu ...
Ta table "contrat" doit contenir une clé primaire "con_num", et trois clés étrangères : "clt_num", "ent_num", et "crt_num", avec une intégrité obligatoire sur "crt_num". Si il s'agit d'une entreprise, on mettra "0" dans "clt_num" ou (exclusif) "0" dans "ent_num". Pour respecter les intégrités référentielles, on créera des enregistrements vides dans chacune des tables "clients" et "entreprise". "

Donc j'ai remis la table Entreprise, mis les 3 clés étrangéres, mais visiblement, il veut que je fasse mette une " integrité obligatoire " sur crt_num.

Mais je ne sais pas comment faire.

Comprends tu mieux mon probleme ?

De plus, tant que j'y suis, j'aimerais savoir si tu pouvais m'expliquer cette histoire de " enregistrement vide "

merci
0
Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014
25 > alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007

5 juin 2007 à 11:50
Ah je comprends mieux effectivement. Je pense qu'il s'agit de forcer l'utilisateur à mettre une valeur dans le champ crt_num, donc qu'il soint non nul.
Les enregistrements vides, c'est pour éviter les erreurs lorsque tu créeras les intégrités référentielles. En fait, Access ira chercher les valeurs correspondantes aux enregistrements que tu auras effectuer dans la table CONTRAT. S'il ne les trouve pas, un message d'erreur s'affichera : l'intégrité référentielle n'est pas respectée.
J'espère avoir répondu à ton problème.
0
alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007
> Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014

5 juin 2007 à 12:00
a vrai dire tu a su me repondre sur le vocabulaire technique mais moins sur les réponses au probleme :

En effet, on veut surement forcer l'utilisateur a mettre une valeur, mais comment faire pour mettre en place cette integrité d'obligatio n? je dosi cocher quoi ?

pour les enregistrements, je vosi pas trop a quoi ca sert :

uen contraite d'integrité ,si je ne m'abuse, sert a dire par exemple : " dans la table contrat, tu ne peux pas avoir un client qui n'existe pas "

en quoi faire un enregistrement vide empeche une erreur ?

Et aussi, un enregistrement vide c'est bien ce que j'ai entouré en rouge sur mon screen ?

https://imageshack.com/

merci
0
Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014
25 > alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007

5 juin 2007 à 14:08
Oui mais celui dont te parle ton collègue ou je ne sais quoi doit contenir au moins la clé primaire. Voilà pourquoi il te dit "quelques enregistrements vides". En reprenant ta définition de la contrainte d'intégrité référentielle, tu as simplement à comprendre que si tu crées un enregistrement dans contrat, il lui faudra soit un client soit une entreprise donc les tables correspondantes doivent contenir des données.
Par contre, je ne sais pas ce qu'il faut cocher mais tu peux aller dans la création de table en MODE SQL et compléter cette ligne :
crt_num "type" --je ne sais pas ce que tu as mis si c'est un entier ou quoi mais laisse le comme tu l'as mis-- REFERENCES ... --il sera déjà mis si la relation est déjà crée-- NOT NULL
0
Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014
25
5 juin 2007 à 14:13
Re !
Oublies la ligne ... Je suis allée dans Access et j'ai recherché la correspondance de ce que je te disais ! En fait, tu vas en MODE CREATION (symbole avec l'équerre) et tu vas sur l'attribut crt_num. En bas de la fenêtre, tu as les propriétés du champ. Tu vas à Null Interdit et tu choisis OUI.
0
alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007

5 juin 2007 à 14:52
Bon j'ai mis le Null interdit sur oui, totuefois y a encore quelques points sur lesquels j'ai du mal a tout comprendre.

" Oui mais celui dont te parle ton collègue ou je ne sais quoi doit contenir au moins la clé primaire "

> Comment ca au moins la clé primaire ? toutes mes tables contiennent une clé primaire et ca me semble normal. Pourquoi n'y en aurait il pas ?

" En reprenant ta définition de la contrainte d'intégrité référentielle, tu as simplement à comprendre que si tu crées un enregistrement dans contrat, il lui faudra soit un client soit une entreprise donc les tables correspondantes doivent contenir des données. "

> Oui exact, si je rentre un enregistrement, je dois avoir soit un client, soit une entreprise nous sommes bien d'accord.

Mais en quoi, faire un champ ( ici la premiere ligne ) appelé " enregistrement vide " influe sur quoi que ce soit ?

Je vosi vraiment pas l'interêt de cet enregistrement.

________________________________________________

Bon, je met un lien qui permet de telecharger ma base de données, peut tu me dire si elle est correct par rapport au consignes énnoncées plus haut ?

http://www.megaupload.com/?d=3HWCXWZC
0
Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014
25 > alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007

5 juin 2007 à 15:03
Il y a une erreur dans ta BDD ! Le Null Interdit, ce n'est pas pour la clé primaire de la table COURTIER que tu dois le mettre mais pour la clé étrangère crt_code dans la table CONTRAT !
Sinon, le reste est cohérent.

* "toutes mes tables contiennent une clé primaire" >> Tout à fait normal, ce que je voulais te dire c'est que l'enregistrement doit être vide pour les autres champs mais la clé primaire doit être donnée.

* "en quoi, faire un champ ( ici la premiere ligne ) appelé " enregistrement vide " influe sur quoi que ce soit ?" >> Tu dois créer plusieurs enregistrements vides ayant une clé primaire afin d'avoir des données avec lesquelles les enregistrements contenus dans la table CONTRAT pourront se référer.
0
alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007
> Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014

5 juin 2007 à 15:31
Merci chef, c'est corrigé.

Pour les enregistrement vide, est ce bien ce que j'ai fait pour les 3 tables ( client, entreprise et courtier ) en laissant la premiere ligne d'information vide ?

Faut il en faire plusieur par table ?
0
Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014
25 > alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007

5 juin 2007 à 15:41
Oui, fais en deux ou trois en ayant REMPLI le champ de la CLE PRIMAIRE !
0
alecc
Messages postés
6
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
5 juin 2007

5 juin 2007 à 15:51
Oki, encore 2 choses :

C'est important que le nombre de champs vide soit le même pour toutes les tables ?


et pour les valeurs, elles ont une importances ? je met 0 ?
0
Halimouche
Messages postés
1755
Date d'inscription
mardi 5 juin 2007
Statut
Membre
Dernière intervention
27 février 2014
25
5 juin 2007 à 20:38
Non ce n'est pas grave si les deux tables comportent un nombre d'enregistrements vides différents ... C'est une simulation alors imagines s'il devait y avoir autant de clients que d'entreprises :-s Les valeurs n'ont pas d'importance tant que tu ne leur as pas spécifiée de contraintes particulières.
0