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 17/02/2011, 15h45   #1
Futur Membre du Club
 
Thomas M
Inscription : février 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Thomas M

Informations forums :
Inscription : février 2011
Messages : 38
Points : 19
Points : 19
Par défaut Structurer ses tables pour répartir une quantité selon différentes tables et conditions de jointures

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
Code :
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               )
Qui représente donc ce que je dois produire comme type de légume chaque mois pour chaque marché.

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 :
Code :
1
2
3
Repartition Mono (
	Type (*) : Chaîne de Caractères
	Champ : Chaîne de Caractères    )
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 :
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     )
Prenons l’exemple suivant :

Table ProductionLégume
Code :
1
2
3
4
Type	Marché		Mois		Quantité
Type01	ID_Marché02	"2011/02"	6980
Type02	ID_Marché03	"2011/02"	14655
Et dans mes deux tables de répartitions j’ai actuellement :

Répartition Mono
Code :
1
2
3
Type (*)	Champ
Type01		ID_Champ1
Et

Répartition Multi
Code :
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 %
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 :
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! »
	)
)
et idem pour la colonne avec Taux*Quantité. Pas très rigoureux non ? J’arrive quand même à obtenir ce que je veux :

Code :
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%
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.

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
thomas.m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 18h10   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
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 410
Points : 4 439
Points : 4 439
bonjour,

pour bien structurer ses tables il faut commencer par modéliser les données à partir des règles de gestion.

Et là…

Citation:
Envoyé par thomas.m
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 :
Avec un exemple "monochamp" sur Type01
Code :
1
2
3
4
5
Code :
 
Type(*)	Marché(*)	Mois(*)	Champ		ProductionRépartie
…
Type01	ID_Marché02	2011/02	ID_Champ1	6980 * 100%
Avec un marché et un mois qui ne devait, soi-disant, pas intervenir

Ce que j’ai compris :

Un type de légume est produit chaque mois :
ProductionTypeLegume(Type, Mois, quantité)

La production est répartie dans un ou plusieurs champs :
Repartition(#Type, #Mois, champ, pourcentage) reliée à ProductionTypeLegume

Le reste est flou :
Peut-être qu’une répartition est destinée à un marché particulier, dans ce cas :
Repartition(#Type, #Mois, champ, pourcentage, Marché)

Mais sinon…
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 18h50   #3
Futur Membre du Club
 
Thomas M
Inscription : février 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Thomas M

Informations forums :
Inscription : février 2011
Messages : 38
Points : 19
Points : 19
Citation:
Envoyé par f-leb Voir le message
Un type de légume est produit chaque mois :
ProductionTypeLegume(Type, Mois, quantité)

La production est répartie dans un ou plusieurs champs :
Repartition(#Type, #Mois, champ, pourcentage) reliée à ProductionTypeLegume
Bonsoir,
Merci tout d'abord d'avoir pris la peine de me lire.

Alors en fait je me suis peut être mal exprimé (il faut dire que ce n'est pas tout simple :/)

Un type de légume est produit chaque mois pour un marché préci (ou client est peut être plus clair):
ProductionTypeLegume(Type, Mois, Marché, quantité)
Par exemple, je veux 5000 carottes pour le marché1 (client1) en Février, 2000 carottes pour le marché2 (client2) en Février etc..

La production est répartie dans des champs (j'aurais peut être dû utiliser le mot "usine" car champ est ambigû dans ce cas là).
Disons la production nécessaire pour chaque Client pour chaque mois de chaque Type de Produit est répartie dans des Usines selon différents critères. Il y a deux répartitions en quelque sorte:

Repartition_Mono(#Type, Usine)
Pour certains Types, on attribue la production à une Usine sans se soucier du client(ou marché) ni même du mois. On fait donc la jointure sur Type uniquement

Repartition_Multi(#Type, #Marché, #Mois, Usine, Pourcentage)
Dans ce cas là, pour certains Types, on répartie la quantité dans plusieurs Volumes, et celà dépend du Marché(Client). On fait donc la jointure sur Type, Marché et Mois.

En fait on produit des modèles différents dans des usines, et souvent on n'a pas le choix, des modèles sont forcément attribués à une usine car on ne peut pas les fabriquer ailleurs, et pour certains modèles, on peut les fabriquer dans plusieurs Usines, du coup on les fabriques en fonction du Client à qui on veut les livrer (autant produire près de là où on va les vendre), et ces taux de répartion changent d'un mois à l'autre.

J'espère avoir été assez clair, n'hésitez pas à me demander des précisions!

Merci beaucoup encore pour le temps consacré,

Bonne soirée
thomas.m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 21h53   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
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 410
Points : 4 439
Points : 4 439
bon, on va faire autrement…

Citation:
Envoyé par thomas.m
En fait on produit des modèles différents dans des usines, et souvent on n'a pas le choix, des modèles sont forcément attribués à une usine car on ne peut pas les fabriquer ailleurs, et pour certains modèles, on peut les fabriquer dans plusieurs Usines
On attribue donc des modèles à une ou plusieurs usines selon leurs capacités:


Citation:
Envoyé par thomas.m
Disons la production nécessaire pour chaque Client pour chaque mois de chaque Type de Produit…


Citation:
Envoyé par thomas.m
La production est répartie dans des champs (j'aurais peut être dû utiliser le mot "usine" car champ est ambigû dans ce cas là).
On répartit donc la production dans les différentes usines mais seulement vers celles qui ont la capacité de produire le modèle.


T’en penses quoi ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 10h07   #5
Futur Membre du Club
 
Thomas M
Inscription : février 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Thomas M

Informations forums :
Inscription : février 2011
Messages : 38
Points : 19
Points : 19
Bonjour,

Tout d'abord merci beaucoup pour ta réponse,

Je trouve ça vraiment pas mal, mais je ne comprends pas très bien l'utilité de AttribuerProd vu que Repartir pourrait suffir dans ce cas là? (on pourrait le schinter?)



En fait, je reçois tous les mois un fichier avec les Usines et taux de répartition en fonction de Client et idTypeModele et Mois. 90% des modèles sont toujours fait dans la même usine. Du coup, il y a redondance d'énormément d'informations si pour ces 90% de Type de Modèles on doit tous les mois rajouter des entrées pour chaque Client, Mois .. alors que la répartition ne change pas.
Actuellement, les tables sont comme ça:



J'aimerais donc trouver une façon élégante de gérer cette double jointure externe, un peu comme tu as fait, mais d'avoir les champs Client et Mois remplis uniquement pour les idTypeModele qui se font dans plusieurs Usines.

Merci !
thomas.m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h58   #6
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
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 410
Points : 4 439
Points : 4 439
bonjour,

certains modèles ont leurs productions réparties dans plusieurs usines selon le client et le mois:


d'autres modèles sont produits dans une seule usine avec une qtté mensuelle identique chaque mois quelque soit le client:


Il faudra veiller à ce qu'un modèle ne puisse se retrouver à la fois dans ProductionMono et ProductionMulti.

c'est mieux comme ça ?

[EDIT] manque une table Client pour bien faire ...[/EDIT]
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 17h06   #7
Futur Membre du Club
 
Thomas M
Inscription : février 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Thomas M

Informations forums :
Inscription : février 2011
Messages : 38
Points : 19
Points : 19
Citation:
Envoyé par f-leb Voir le message
d'autres modèles sont produits dans une seule usine avec une qtté mensuelle identique chaque mois quelque soit le client:
Hum en fait c'est faux ... Cette quantité varie d'un mois à l'autre, c'est pour ça que j'aimerais conserver la table Production en une seule table avec
Client Mois TypeModele Quantité



(PS: mon Client est un Pays en fait)

Voilà en exemple concret les deux différents types de répartition que j'ai:
Multisites:


et Monosite:


Peut être si c'est plus clair, voilà comment je gère ça actuellement:



Après il y a peut être pas de meilleure solution...

Merci encore pour ton temps.
thomas.m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 15h28   #8
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
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 410
Points : 4 439
Points : 4 439
Bonjour thomas.m,

je persévère quand même…


Une production concerne un pays, un mois et un modèle (table Production)
Certains modèles sont produits dans une seule et même usine (table RepartitionMono) quels que soient le pays et le mois (cas du "type 2" par exemple).

La table Repartir (dont le contenu apparait en sous-feuille de données de la table Production) ne comprend que les répartitions des modèles fabriqués par plusieurs usines.
Il n’y a donc aucune redondance, les 500 "type 2" de Février et les 700 du mois de Mars seront toujours fabriquées dans l’ "usine 38" d’après la table RepartitionMono.

Pour avoir la répartition globale, il faut passer par plusieurs requêtes à construire avec les assistants.

La première pour les productions multi-sites avec les jointures nécessaire sur les tables Production et Repartir :


La deuxième pour les productions mono-sites faisant participer la table RepartitionMono :


Et la dernière avec UNION sur les deux précédentes :
Code sql :
1
2
3
SELECT * FROM Requête1
UNION
SELECT * FROM Requête2


Sommes-nous d’accord cette fois ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/02/2011, 15h41   #9
Futur Membre du Club
 
Thomas M
Inscription : février 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Thomas M

Informations forums :
Inscription : février 2011
Messages : 38
Points : 19
Points : 19
Merci beaucoup Fabien, c'est exactement ce que je cherchais.

Je testerai ça lundi et je te tiendrai au courant, mais ça devrait surement aller.

Merci encore, et bon weekend.
thomas.m 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 12h20.


 
 
 
 
Partenaires

Hébergement Web