Fractionner les tables dans MS-Access
RésoluTitou1989 Messages postés 2 Date d'inscription vendredi 5 janvier 2024 Statut Membre Dernière intervention 9 janvier 2024 - 9 janv. 2024 à 16:06
- Germain veut gérer les activités de son association avec une base de données. il a commencé à créer des tables dans un fichier, mais il n’est pas sûr du résultat. le fichier à télécharger contient uniquement le schéma de cette base de données. en l’état actuel, que peut-on en déduire ?
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
3 réponses
4 janv. 2024 à 19:09
bonjour,
Es-tu certain de ce que tu écris "lorsque je crée un nouvel enregistrement dans la table mère T_Ope (en passant par le menu des tables pour par une fonction dédiée), cela crée bien un nouvel enregistrement dans la table fille"?
Je me demande si ce que tu crois être un enregistrement dans la table fille n'est pas simplement une ligne destinée à encoder le contenu d'un nouvel enregistrement.
L'intégrité référentielle ne va pas créer d'enregistrements, elle ne peut que modifier ou supprimer des enregistrements.
Surtout, je pense que tes tables ne sont pas structurées correctement. Il n'est pas gênant, en soi, d'avoir de nombreux champs dans une table. C'est cependant souvent signe d'une mauvaise conception.
Si tu nous donnes beaucoup plus d'information sur ce que tu veux réaliser, nous pourrons peut-être te suggérer commet structurer tes tables.
5 janv. 2024 à 15:31
Bonjour, merci pour ton retour,
Quand je parle de créer un nouvel enregistrement, je suis dans ma table T_Ope, en mode Feuille de Données, et je remplis plusieurs lignes avec des données de test (voir image ci-dessous).
J'ai aussi essayé de créer un formulaire permettant d'afficher toutes les données de la table T_Ope, ce qui permet également de créer de nouveaux enregistrements. Mais la valeur de la clé primaire Num_Ope reste à 0 dans les tables filles.
J'imagine que ce n'est pas très clair, je vais essayer de reprendre depuis le début pour un peu plus de contexte.
Je cherche à créer un utilitaire pour faciliter mon travail et celui des autres chefs de projets dans ma boite. Nous travaillons pour un bailleur social et réalisons des opérations de construction de logements.
Dans la pratique, nous avons un portefeuille de plusieurs dizaines d'opérations (entre 30 et 40 chacun), qui durent entre 3 et 5 ans chacune (trouver un terrain, concevoir une opération immobilière dessus, obtenir les financements pour la réaliser, désigner les entreprises qui feront les travaux, suivre les travaux, livrer l'opération, gérer le SAV).
Aujourd'hui, nous n'avons pas d'outil de suivi opérationnel dédié, malgré nos demandes, et j'essaie de pallier à ça en bricolant une solution maison (le sujet m'intéresse).
J'ai une formation d'ingénieur bâtiment, mais assez peu de notions de code. J'ai pu avoir une formation de 3 jours sur Access, et j'essaie de partir de ça pour bidouiller un truc.
Je ne maîtrise pas du tout VBA, du coup j'essaie de passer par les fonctions intégrées dans Access, ça fait déjà un paquet de trucs à maîtriser…
L'utilitaire serait centré sur une opération, et centraliserait plusieurs types de données :
- Des caractéristiques techniques séparées entre
- celles qui s'appliquent à l'ensemble de l'opération (situation géographique, type de financement, contacts, chef de projet, présence de commerces, Labels de construction, législation applicable, etc...)
- Le détail des logements qui la composent (n° du logt, surface, typologie, présence d'un Pk, etc...)
- Des caractéristiques financières (la décomposition du prix de revient de l'opération, et celle de son plan de financement)
- Des éléments de planning prévisionnel et réalisé (les dates importantes pour le suivi de l'opération : achat du terrain, obtention des financements, démarrage des travaux…)
Aujourd'hui, nous traitons ces données avec des tableaux Excel, mais vu leur nombre, nous ne pouvons avoir un seul tableau, donc on se retrouve avec des données redondantes entre tableaux, des incohérences, du temps perdu...
L'idée de l'utilitaire Access serait de rentrer les informations une seule fois, de pouvoir les modifier au jour le jour, et de publier des Etats prédéfinis en fonction de nos besoins (suivi hebdomadaire, reportings...).
J'ai bien conscience que la masse de travail pour arriver à quelque chose de fonctionnel est considérable, mais, encore une fois, le sujet m'intéresse, et l'expérience acquise pourra toujours me servir pour réaliser des utilitaires un peu moins gros.
Et si j'arrive a faire quelque chose d'un peu fonctionnel, j'essaierai sans doute d'y incorporer de nouvelles fonctionnalités (des dates de suivi plus précises, la création de remarques attribuées à une opération…)
Tu trouveras dans l'image ci-dessous mon projet de tables de relations, pour te faire une idée des volumes dont on parle (les clés primaires sont identifiées avec des étoiles).
Les tables qui aujourd'hui me posent problème sont les suivantes :
- T_Ope : La table "Mère" qui définit une opération avec sa situation géographique, et son référencement dans ma société
- T_Carac_Ope : une table dans laquelle j'intègre des données techniques qui s'appliquent à l'ensemble de l'opération. Elles sont assez nombreuses, et pourraient amener à être encore augmentées, d'où mon idée d'en faire une table séparée
- T_Prix_Revient : Des éléments financiers s'appliquant à l'ensemble de l'opération (il ne s'agit pas de données calculées, mais bien de nombre rentrés par l'utilisateur). Là aussi, possibilité d'en rajouter au fil de l'eau
- T_Reel_Ope : les dates auxquelles ont été atteints les jalons principaux de l'opération
Les 3 dernières tables sont reliées à la table T_Ope par le champ Num_Ope, avec une relation de 1 à 1 (un seul enregistrement par opération).
Le champ T_Ope.Num_Ope est un champ de type NuméroAuto
Par contre les champs T_Carac_Ope.Num_Ope, T_Prix_Revient.Num_Ope et T_Reel_Ope.Num_Ope sont de type entier long :
Le fonctionnement de l'utilitaire serait donc : dans un formulaire qui affiche mes opération, je crée une nouvelle opération en passant par un bouton qui crée simultanément un enregistrement dans chacune des quatre tables ci-dessus, avec un champ Num_Ope identique pour ces quatre nouveaux enregistrements.
C'est là dessus que je bute.
J'espère que ces éléments rendent ma demande un peu plus claire.
5 janv. 2024 à 18:21
Je ne vois toujours pas de bonne raison de faire des tables séparées.
L'idée d'utiliser une clé étrangère comme clé primaire me chiffonne un peu.
L'idée que des champs vont venir se rajouter un peu au hasard m'inquiète un peu. Il est parfois préférable d'ajouter des enregistrements plutôt que des champs.
Pour les éléments financiers, par exemple, on pourrait imaginer une table "finance", avec des champs ref_opération, libellé, montant.
Modifié le 5 janv. 2024 à 20:09
Si tu veux faire des tables séparées pour faciliter la vie de l'utilisateur, c'est une fausse piste: la conception des tables doit se faire en fonction de la réalité du monde réel et des données qu'on enregistre, sans tenir compte de comment les éléments seront présentés à l'utilisateur.
La première chose à faire quand on passe de Excel à Access, c'est d'oublier Excel.
Dans Access, il y a les requêtes, les formulaires et les rapports, qui permettent d'interagir avec l'utilisateur en lui cachant la structure des tables.
9 janv. 2024 à 16:06
Ok, merci beaucoup pour ce retour ! Je pense comprendre. Je vais essayer de repenser mes tables avec ces principes en tête !