[Access] Relation de tables
alecc
Messages postés
6
Statut
Membre
-
Halimouche Messages postés 1755 Date d'inscription Statut Membre Dernière intervention -
Halimouche Messages postés 1755 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- [Access] Relation de tables
- Tables des matières word - Guide
- La base de données de sécurité du serveur n'a pas de compte d'ordinateur pour la relation ✓ - Forum Réseau
- Access runtime ✓ - Forum Access
- Access appdata - Guide
- Exemple base de données access à télécharger gratuit ✓ - Forum Logiciels
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.
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.
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.
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.
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
" 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
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.
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.
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 ?
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 ?
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
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.
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
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