Bonjour,
Je me heurte à un petit problème de structuration de mes tables sous Access, et j’aimerais avoir votre avis pour savoir si les solutions que j’ai envisagées sont assez fiables ou s’il y a une meilleure manière de faire ? (en privilégiant la robustesse et la rigueur).
Pour simplifier, imaginons que je vende des légumes, et que selon le type de légume, chaque mois, mes légumes sont produits dans un champ différent (et parfois plusieurs) en fonction du marché où ils sont vendus.
J’ai donc une table
Qui représente donc ce que je dois produire comme type de légume chaque mois pour chaque marché.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ProductionLégume ( Type : Chaîne de caractères Marché : Chaîne de caractères Mois de production : Mois Quantité : Entier Long )
Champ(s) souligné(s) = clé primaire. (*)= clé étrangère.
J’ai une bonne quantité de type de légumes qui sont toujours produits dans le même champ (90%). La notion de Marché et de Mois n’intervient donc pas.
J’ai ainsi une table de Répartition MonoChamp qui ressemble à ça :
Pour les autres types de légumes (10%), ils sont produits dans différents champs, et cela dépend du marché où ils sont vendus. Et bien sûr, cela vari d’un mois à l’autre, sinon ce serait trop facile ! J’ai donc une table de Répartition MultiChamps qui ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Repartition Mono ( Type (*) : Chaîne de Caractères Champ : Chaîne de Caractères )
Prenons l’exemple suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Repartition Multi ( Type (*) : Chaîne de Caractères Marché (*) : Chaîne de Caractères Mois de production (*) : Mois Champ : Chaîne de Caractères Taux de répartition : Pourcentage )
Table ProductionLégume
Et dans mes deux tables de répartitions j’ai actuellement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Type Marché Mois Quantité Type01 ID_Marché02 "2011/02" 6980 Type02 ID_Marché03 "2011/02" 14655
Répartition Mono
Et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Type (*) Champ Type01 ID_Champ1
Répartition Multi
Il suffise donc que j’effectue une jointure de type externe de ma table ProductionLégume sur une colonne pour la table Répartition Mono, et sur trois colonnes pour la table Répartition Multi. Ce qui m’intéresse c’est donc le champ « Champ ID » et « Taux*Quantité » pour savoir où produire et combien. Avec cette double jointure externe, je dois donc faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Type(*) Marché(*) Mois(*) Champ Taux% Type02 ID_Marché03 "2011/02" ID_Champ5 50 % Type02 ID_Marché03 "2011/02" ID_Champ8 30 % Type02 ID_Marché03 "2011/02" ID_Champ9 20 %
et idem pour la colonne avec Taux*Quantité. Pas très rigoureux non ? J’arrive quand même à obtenir ce que je veux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 VraiFaux( RépartitionMulti.Champ Est Pas Null ; RépartitionMulti.Champ ; VraiFaux( RépartitionMono.Champ Est Pas Null ; « Erreur pas de correspondance! » ) )
J’aimerais donc savoir si vous aviez en tête une meilleure manière de structurer ça ? Car au niveau des intégrités référentielles c’est du coup carrément impossible à mettre en place. Il serait possible de mettre toutes les répartitions dans la même table, en considérant les types « monochamp » avec une entrée à 100%, mais étant donné que j’ai plus d’une cinquantaine de types de produits, avec une vingtaine de marchés, et ce pour chaque mois, je me retrouve avec une table mono de 50 entrées à 50*20*12 mois = 12000. Je sais que cela ne posera pas trop de problème à Accès, mais s’il y a une manière plus élégante de faire, avec des classes d’associations par exemple, de gérer cette sorte de jointure conditionnelle, ça m'intéresse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Type(*) Marché(*) Mois(*) Champ ProductionRépartie Type02 ID_Marché03 2011/02 ID_Champ5 14655 * 50 % Type02 ID_Marché03 2011/02 ID_Champ8 14655 * 30 % Type02 ID_Marché03 2011/02 ID_Champ9 14655 * 20 % Type01 ID_Marché02 2011/02 ID_Champ1 6980 * 100%
De plus la table de répartition doit être mise à jour mensuellement par l'import d'un fichier Excel, et les types de produits, marchés, etc sont ammenés à évoluer, du coup pour éviter des problèmes d'intégrité, je pense qu'il est nécessaire d'avoir une structure bien construite.
J'espère que vous m'avez suivi jusque là
Merci beaucoup d'avance de me consacrer un peu de votre temps.
PS : je travaille avec Access 2003
Partager