Probleme base de données as400 vers mysql

Résolu/Fermé
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022 - Modifié le 1 août 2022 à 14:49
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022 - 25 août 2022 à 09:11

Bonjour,

comme évoqué dans le post ci après : https://forums.commentcamarche.net/forum/affich-37644815-c-mysql-programme-trop-long-a-s-executer#p37651375

à l'origine je ne trouvé pas l'origine de la lenteur de mon programme.

Après avoir eu quelques conseils et investigation, je me suis rendu compte que c'est au niveau de la base de données qu'il y avait un soucis.

Avant on utilisait l'as400 toutefois, celui ci étant destiné à disparaitre, on m'a mis à disposition un export brut de la base de données, dans une base mysql (phpmyadmin) le probleme c'est qu'il n'y a pas de lien entre les tables, car ils ont réalisés que l'export des données.

Lorsque je faisais la jointure dans mon programme ça ne marchait pas ou était très long à s'executer, j'ai tenté de "créer" des liens entre mes tables mais, bien que je n'aime pas le terme "impossible", c'est un peu trop compliqué pour moi.

Voici la structure des tables exportés : 

Table0
 	ColonneCOD 	varchar(7) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIRET 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMENTREPRISE	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneMONTANT 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneDATESOLDE 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADHFER 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
	
Table1
 	ColonneCOD 	varchar(2) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(50) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(6) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
	ColonneNumEntreprise 	varchar(12) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneRAISOC 	varchar(35) 	utf8_general_ci 		Oui 	NULL 				
 	ColonneADRESS1 	varchar(35) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADRESS2 	varchar(35) 	utf8_general_ci 		Oui 	NULL 		
 		

Table2
 	ColonneCOD 	varchar(2) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(50) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(6) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneDETCHR 	varchar(6) 	utf8_general_ci 		Oui 	NULL 		
 	

table3
 	ColonneCOD 	varchar(7) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(39) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNumEntreprise 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneRAISOC 	varchar(27) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneRAISO2 	varchar(32) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADRESS 	varchar(31) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADRES2 	varchar(24) 	utf8_general_ci 		Oui 	NULL 			


table4
 	ColonneCOD 	varchar(7) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(39) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
				

pour chaque table j'ai dans un premier temps, tenté de créer une colonne "colonne_id" en primaire et autoincrement mais ça n'aurait pas marché, car dans une table , table0 par exemple, on peut avoir 50 lignes et dans la table1 150 000 lignes et comme l'id aurait été en auto-increment, il n'y aurais pas de lien veritable.

Ensuite, j'avais pensé à mettre le numsiret en id (clé primaire) mais là c'est la meme chose, on peut avoir plusieurs lignes pour un siret données, quant à la colonne "ColonneCOD", elle correspond à la valeur "5" pour chaque ligne  donc la c'est pareil, on ne peut pas l'utiliser comme clé primaire.

Peux on recreer un mcd a partir de ses données ou faut il obligatoirement refaire un export, mais cette fois ci avec les liens entre chaque table?

Merci beaucoup


Windows / Chrome 103.0.0.0

12 réponses

jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460
Modifié le 1 août 2022 à 15:09

Bonjour,

Pour recréer un MCD il serait plus simple de savoir ce que l'on gère. Et aussi avoir des noms de tables significatifs, pas table0, table1 ... et expliquer ce qu'elle contient. Puis si une table comporte 10 lignes ou 500 000 , c'est aussi un indice dans la compréhension de l'organisation de la BDD. Et les noms de champs qui commencent tous par colonnexxx cela ne simplifie pas la lecture.

Généralement on utilise un ID comme clé primaire quand on n'a pas de donnée significative. Cet ID n'a rien d'obligatoire. Les performances en recherche sont liés aux index associés aux colonnes, c'est plutôt donc vers la création d'index qu'il faudrait regarder. Après j'ignore quand on déclare une clé primaire sur Mysql si un index associé est créé automatiquement.


0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
1 août 2022 à 15:34

J'ai tenté de refaire le plus significativement possible le nom des tables :

SOldeEntreprise
 	ColonneCOD 	varchar(7) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIRET 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMENTREPRISE	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneMONTANT 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneDATESOLDE 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADHFER 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
	
Entreprise
 	ColonneCOD 	varchar(2) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(50) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(6) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
	ColonneNumEntreprise 	varchar(12) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneRAISOC 	varchar(35) 	utf8_general_ci 		Oui 	NULL 				
 	ColonneADRESS1 	varchar(35) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADRESS2 	varchar(35) 	utf8_general_ci 		Oui 	NULL 		
 		

TypeEmission
 	ColonneCOD 	varchar(2) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(50) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(6) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneDETCHR 	varchar(6) 	utf8_general_ci 		Oui 	NULL 		
	ColonneEmiNet
	ColonneBaseEmission
	ColonneMontantEMission
	ColonneLibelleEmission
 	

TypeEncaissement
 	ColonneCOD 	varchar(7) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(39) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNumEntreprise 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneRAISOC 	varchar(27) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneRAISO2 	varchar(32) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADRESS 	varchar(31) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneADRES2 	varchar(24) 	utf8_general_ci 		Oui 	NULL 			
	colonneDebitEncaissement
	ColonneTotalEncaissement
	

table4
 	ColonneCOD 	varchar(7) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNOMFICHIER 	varchar(39) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneENTCHR 	varchar(9) 	utf8_general_ci 		Oui 	NULL 		
 	ColonneNUMSIR 	varchar(14) 	utf8_general_ci 		Oui 	NULL 
	COlonneMontantEncaissement
	ColonneDateEncaissement
				

Voila tout le problème :

je sais qu'il gère les emissions et encaissements des entreprises.

Mon programme prend un fichier en entrée, il va lire les sirens de ce fichier et interroge la base de données  et en gros, s'il trouve un siren, il va retournée les résultats dans mon fichires excel de sortie, sinon il ne retourne rien, exemple:

il va lire le numero 123456 ,45698, 65879 etcc, ils vont etre enregistré dans un tableau puis mon programme va faire un select ( qui se trouve dans une boucle for et mo nreader va retournée les résulats :

123456  - entreprise Maçon1 ,etc....  (là on aura des données dans les cellules du fichier excel)

45698  -> pas de résultats donc les colonnes seront vide

65879 -> Entreprise de béton , etc......

Concernant une vue significative, là j'ai essayé de mettre des noms à peu près français , mais le nom des colonnes ne veut rien dire pour moi  avec leur codifications, les seuls champs que j'ai reconnu à peu pret son mathadh ( matricule adhérent ) ou NUMSIR ( numéro siret) , donc j'ai retranscrit au mieux en français ci après.
Le soucis en ce qui concerne la création d'index, j'ai déja essayé de le faire sur la colonne ColonneCOD, ça n'a pas marché , même sur la colonne "numsiret" mais mysql ne veut pas  :(

J'ai fais le test de mettre en clé primaire le champs numsiret, pour la table0 ça marche car dans chaque ligne, nous n'avons pas de doublon, mais pour l'autre table, voila le message que j'ai : 

ALTER TABLE `table1` ADD PRIMARY KEY(`TESNUMSIR`);

MySQL a répondu :

#1062 - Duplicata du champ '66609567444446' pour la clef 'PRIMARY'

0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460
1 août 2022 à 16:00

Et NUMENTREPRISE comme n° unique et PK ?

que contient ENTCHR ?

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
1 août 2022 à 17:14

Tant que tu n'as pas compris la signification de ces données, tu ne pourras pas faire une requête correcte qui retourne des données utiles.
Si tu ne connais pas comment fonctionnent les emissions et encaissements des entreprises, fais toi aider par un expert, ou forme toi.

0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
1 août 2022 à 16:18

Bonjour,

idem pour numero entreprise, dans certaines table, il y a plusieurs fois le même numero donc ça ne marchera pas .

J'ai regardé dans les tables, il n'y a que dans les tables typeEncaissement et typeEmission qu'il y a cette colonne, elle corespond à un numerique ( 1,2,3,4... ) mais on ne peut pas l'exploiter, car dans la table TypeEmission, il y a des doublons, exemple : 

1

1

1

2

2

3

4

5

etc.....

j'ai essayé de trouver un lien entre les deux voir si par exemple en fonction du chiffre on a le meme siret mais non, tout est différent.

0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460
Modifié le 1 août 2022 à 16:57

NUMENTREPRISE sur table1/entreprise est-il unique, c'est cela qui est important

il peut être présent plusieurs fois dans d'autres table si la même entreprise réalise plusieurs émissions, encaissements     



 


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
1 août 2022 à 16:51

bonjour,

Lisant ceci: "Mon programme prend un fichier en entrée, il va lire les sirens de ce fichier et interroge la base de données  et en gros, s'il trouve un siren, il va retournée les résultats dans mon fichires excel de sortie, sinon il ne retourne rien, exemple:", et ceci "Lorsque je faisais la jointure dans mon programme ça ne marchait pas ou était très long à s'executer".

Je m'interroge sur l'idée de faire une jointure sur toutes les tables pour "retourner" un résultat.  Il faudrait d'abord comprendre quel est le résultat attendu, et, ensuite, réfléchir à comment l'obtenir.

D'où vient l'idée qu'un fichier Excel peut servir de "sortie" à l'ensemble d'une base de données?

Qu'essaies-tu réellement de réaliser?  L'as-tu suffisamment compris.

0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
2 août 2022 à 14:28

Bonjour,

voici le traitement initial, via l'as400 est fondé sur le même principe.

D'après ce que l'on m'a expliqué, en entrée il avait un fichire texte, à partir de ce fichier, il faisait un traitement ( interrogé la base de données ) et en sortie il avait un fichier excel. Le principe de ce traitement est juste une interrogation de base de données.

Pour exemple:

D'une mois à l'autre, le fichier texte peut être plus ou moins volumineux, à partir de ce fichier :

- il interrogé la base de donnée,

- généré un fichier excel

cela veut dire que, pour un siren donnée ( lu dans le fichier en entrée ) , la base nous retourne les résultats, avec toutes les colonnes correspondante, puis ensuite je génère un fichier excel.

Pour résumer,

à partir du fichire texte, je dois générer un fichier excel qui me retourne tous les résultats selon un siren données, ma requête étant juste un select avec 3 jointures et en clause xhere mon numero de siren (voir mon programme c# dans le post précédent).

L'idée du fichier excel en gros, on me l'a imposé, car ils exactement la meme chose, c'est qu'a partir du fichier en entrée, un fichier excel se génère avec toutes les colonnes de résultat. 

Je suis un peu obligé de faire des jointures car chaque données obligatoires se trouvent dans les dirrérentes tables.

J'ai appelé un collegue pour avoir plus d'information :

je me posais la question à savoir comment les données seront mis à jour , mais pour le moment on ne sait pas, en gros, je construits juste un programme pour aller de B vers C, avec un fichier en entrée et un excel en sortie, mais pour ce qui est de la mise à jour des données (A vers B) pour le moment j'en sais pas plus.

Comme cité précedemment, pour le moment, dans ma base mysql se sont que des données issus d'un export brut, (sans les liens), qu'on a réalisé pour moi, afin que je créé mon programme.

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
2 août 2022 à 16:05

Il faudrait que comprennes ce que signifie chaque colonne du fichier Excel, et comment obtenir cette info de la base de données.

0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
3 août 2022 à 11:03

Bonjour,

petit edit : concernant la colonne, j'ai regardé plus précisément et après test dans la base prep, je peux bien me servir de cette colonne pour clé primaire.

Toutefois, dans une de mes tables, je n'ai pas cette données et malheureusement pour moi, j'ai besoin de cette table, pour récupérer la valeur de deux colonnes ( :( ).

Je vais me renseigné auprès d'un collegue pour qu'il m'explique un peu les intitulés des colonnes en effet, merci.

0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460
Modifié le 3 août 2022 à 11:56

tu n'es toujours pas assez précis : concernant la colonne ? une de mes tables, je n'ai pas cette données ?
 

Une clé primaire c'est seulement dans la table de définition de cette entité. Dans les autres tables c'est une clé étrangère. Et donc sur cette donnée si elle sert à effectuer des jointures, pour les temps de réponse, il est interessant de créer des index.

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024
3 août 2022 à 12:14

Le souci, pour le moment, c'est d'extraire des données correctes.
Les performances  pourront être améliorées ensuite.

1
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
8 août 2022 à 08:52

bonjour,

désolé pour le temps de réponse, j'etais accaparé par autre chose dernièrement, sinon j'ai également réfléchi sur le sujet et je me suis dis la chose suivante:

s'il s'agit d'un export brut, je me suis dis que dans chaque fichier excel, il doit y avoir au moins une clé primaire et potentiellement une clé étrangère également, qui comme tu le dis sert à faire la jointure.

'J'ai fais des tests rapide vendredi dernier et je me suis posé une question, se pourrait il que la clé primaire soit un couple de deux champs ? 

mercii

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
8 août 2022 à 10:50

Rien ne s'oppose à utiliser des combinaisons de champs pour des clés.

0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
10 août 2022 à 09:49

Bonjour,

j'ai retravaillé des fichier, afin de vous motnré mes données, on voit qu'il y a un lien , mais je n'arrive pas à définir les clés primaire, voici les liens : 

https://www.cjoint.com/c/LHkhSPiYEW0

https://www.cjoint.com/c/LHkhTGjb7A0

https://www.cjoint.com/c/LHkhTTYSUQ0

https://www.cjoint.com/c/LHkhT6EJjN0

https://www.cjoint.com/c/LHkhUjJGbX0

J'ai remarqué qu'il y a une certaines correspondance avec la colonne ENTCHR et j'ai tenté de définir des couples mais rien y fait.
Merci

0
jee pee Messages postés 40579 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 21 décembre 2024 9 460
10 août 2022 à 10:28

Tu ne connais toujours pas le modèle de gestion des données et à quoi elle servent, ou si peu. Tu avances au hasard. Tu dois prendre tes données et aller voir un utilisateur de l'application d'origine pour qu'il t'explique leurs significations et leurs liens. Lui il va t'expliquer ce qu'il gère et en regardant une donnée il doit savoir dire, voilà c'est ce champ là sur l'écran de l'application, et cela sert à ... Exemple, il faut savoir donner un nom en clair en ENTCHR.


0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
10 août 2022 à 14:21

lol, on est d'accord.

Justement c'est ce que je disais, on est venu me voir en m'expliquant que l'as400 va se terminer, il faut un programme , avec lequel on obtient le même résulta : voila un fichire en entré et il faut le meme fichier excel en sortie , bon courage ! 

voila en gros ce qu'on m'a dit lol.

la personne qui s'occupait de cela est en congés et rentre quand je m'en vais en congés, puis la personne m'ayant donné ce projet à faire, idem, on se croisera que quelque jour, je vais essayé d'en savoir plus.

Autrement dit, Déjà  j'ai le un pseudo four que j'ai "construit", il manque plus que certains ingrédient en bonne quantité , pour réaliser la patisserie et metrte le tout à chauffé enfin lol , en tout cas merci pour tes conseils :)

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
10 août 2022 à 14:25

Le point de départ, c'est de comprendre le contenu du fichier de sortie.

0
ptisephy Messages postés 74 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 8 novembre 2022
25 août 2022 à 09:11

Bien le bonjour,

alors j'ai mon collègue qui est revenu de congés ( à deux jours de mon départ en congés, je termine demain soir ) et il m'a fourni les documents avec les clefs primaires et étrangère.

Vous imaginez à quel point j'etais content de ne plus avancé à l'aveugle car depuis le temps , je patogais, bref et comme je le soupçonnais, dans certaines tables, parfois il y a 5 champs qui compose une clés primaire.

Là je vais pouvoir avancé ^

0