Le titre n'est pas forcément clair alors je vais expliquer ma problématique en détail. Je dois créer une application / un outil pour automatiser la création ou mise à jour d'une base de donnée locale dans mon entreprise. Cet outil doit pouvoir être utilisé sur n'importe quel ordinateur (donc pas de MS Access car beaucoup de PC ne l'ont pas d'installé) et prendra ses informations depuis 2 ou 3 fichiers Word, chacun de quelques centaines de pages donc environ 10/20k entrées dans ma bdd.
Les différentes solutions que j'ai trouvé serait PHP / MySQL, SQLite, Java / MySQL, etc... Il y a pas mal de façon de faire apparemment. Mon problème est que tous les sujets qui en parlent sont assez vieux, je reposte donc quelque chose qui a déjà été demandé dans le passé.
Quel combinaison serait la plus simple et la plus optimisée? Je ne connais pas assez (voir même très peu) les bdd pour savoir quoi utiliser (logiciel ET langage), si vous pouviez m'apporter votre savoir, ça m'aiderait beaucoup!
Merci d'avoir lu et merci d'avance pour vos réponses.
Cet outil doit pouvoir être utilisé sur n'importe quel ordinateur
Donc installé sur un serveur accessible par tous les utilisateurs concernés, donc réseau type "intranet".
Voliarssa a écrit:
prendra ses informations depuis 2 ou 3 fichiers Word, chacun de quelques centaines de pages donc environ 10/20k entrées dans ma bdd
Je ne comprend pas ce point ... C'est que cette histoire de fichier Word ? Les utilisateurs saisissent des données dans ces fichiers Word, et tu veux intégrer ces données dans une base de données ?
Voliarssa a écrit:
Je dois créer une application / un outil
Finalement, il est difficile de te répondre tant la présentation est succinte ...
Quels langages de programmation maîtrises-tu ? Connais-tu SQL ?
Quel est le nombre d'utilisateur ?
Quelle est la fréquence d'utilisation ? En création, en modification et en consultation ...
Quel type de données à stocker ?
Quel environnement informatique ? réseau intranet, serveur web disponible ?
Je voulais dire par "Cet outil doit pouvoir être utilisé sur n'importe quel ordinateur" que l'application va être enregistrée dans un dossier sur le réseau de l'entreprise, il y aura peu de gens qui s'en serviront (5 ou 6 environ) et jamais en même temps mais la bdd pourra donc être lancée depuis n'importe quel ordinateur, sans que je ne puisse choisir si l'ordinateur qui lancera cette application a ce qu'il faut pour la lire (ex: Access si c'est une bdd Access). La bdd créée sera parfois copiée en dehors du serveur sur un ordinateur externe au réseau dans le cas où un employé doit se rendre sur un site de travail.
L'application que je dois créer doit parser des fichiers Word déjà existant pour extraire certaines informations (du texte), et je dois mettre ces informations dans une base de données que je dois créer. Ces fichiers Word seront peut-être modifiés dans le futur, c'est pour cela que je dois faire une application qui automatise le tout. Je n'ai pas de soucis au niveau du parsing, mon problème réside dans le fait que je ne sais pas comment mettre ces informations dans une bdd.
Je connais le SQL, le C#, le C mais j'ai un temps alloué pour ce projet assez grand, donc je peux facilement aller apprendre d'autres langages (type PHP ou Java, que j'ai déjà survolé mais pas encore approfondi), je veux utiliser celui qui est le plus optimisé pour ce que je veux faire.
Environ 5 utilisateurs, peut-être 10 dans le futur, tous en lecture de la bdd uniquement. L'écriture sera uniquement faites par mon application, et rarement (uniquement si un des fichiers Word qui servent de base est modifié) donc aucun risque de conflit normalement. Elle ne sera donc jamais modifiée ou créée par un utilisateur.
Le type de données à stocker est uniquement du texte, qui va du nom d'un fichier à un commentaire de 4/5 lignes.
Pas de serveur web disponible, l'application sera uniquement stocké sur un des serveurs du réseau de l'entreprise, la bdd sera créée au même endroit. La bdd sera parfois copié sur un ordinateur en local.
J'espère avoir été clair cette fois-ci, c'est un domaine tout nouveau pour moi (étudiant de 2nde année en stage en entreprise) et j'ai encore énormément de choses à apprendre, ne serait-ce que pour donner toutes les informations dont vous avez besoin pour m'aider.
Bonjour philodick, je n'ai malheureusement pas l'autorisation d'installer quoi que ce soit où que ce soit. Je ne peux donc pas installer une machine quelconque pour servir de serveur, je n'ai que le droit (et le devoir) de mettre l'application sur le réseau une fois qu'elle sera finie...
- Edité par Voliarssa 21 septembre 2017 à 11:46:42
L'application que je dois créer doit parser des fichiers Word déjà existant pour extraire certaines informations (du texte), et je dois mettre ces informations dans une base de données que je dois créer. Ces fichiers Word seront peut-être modifiés dans le futur, c'est pour cela que je dois faire une application qui automatise le tout
ça c'est vraiment pourri ...
A créer une base de données, il faut la rendre maître des données ... Donc l'initialiser avec les données des fichiers Word puis supprimer définitivement l'utilisation de ces fichiers pour passer uniquement par l'application.
Voliarssa a écrit:
Pas de serveur web disponible, l'application sera uniquement stocké sur un des serveurs du réseau de l'entreprise, la bdd sera créée au même endroit.
C'est dommage, et donc pas de PHP ...
Voliarssa a écrit:
La bdd sera parfois copié sur un ordinateur en local.
Euh ... cela signifie que l'ordinateur en question devra pouvoir lire la BDD et donc que l'application soit aussi installé sur cet ordinateur avec le SGBD ... et qu'il faudra gérer la possibilité de synchronisation de la base locale avec la base maître ...
Avant toute chose, commences par modéliser ta base avec un modèle conceptuel de données (MCD). Tu peux t'appuyer sur le document "Conception BDD" (cf. ma signature) et un petit logiciel de modélisation genre jMerise. Et tu peux revenir ici discuter du MCD avec la communauté ...
Ensuite clarifies vraiment le fonctionnement global de l'application, et notamment l'aspect fichier Word ... c'est vraiment un truc pourri de conserver ces fichiers en parallèle à ton application ... Je te conseille plutôt de regarder ce qui est fait dans ces fichiers, et de le transposer/prévoir dans ton application.
Après, n'importe lequel des langages de programmation évoqués (C#, C, Java) disposent d'API de dialogue avec les principaux SGBD actuels (MySQL, SQLite, PostGreSQL, SQL Server, Oracle, etc.), et te permettront de créer un applicatif adapté. Donc orientes-toi sur le langage que tu maîtrises le plus.
Enfin, côté SGBD, si la complexité et le volume des données n'est pas important (ce qui semble être le cas), SQLite sera peut-être le plus simple et pratique à mettre en oeuvre ...
Tout d'abord merci de vos réponses, vous m'aidez beaucoup à clarifier ce que je suis censé faire.
Ensuite, pour répondre à philodick: Non je n'installe rien, je dois rendre juste un exécutable et rien d'autre.
Et pour répondre à Benzouye (désolé, je ne suis pas un adepte des forums, je ne sais même pas comment faire de citations ):
Que ce soit pourri ou non je n'ai pas le choix, ces fichiers Word sont utilisés par une cinquantaine de personnes très régulièrement, les supprimer n'est pas une option possible...
Je pensais qu'il était possible de le faire en PHP avec des scripts même pour une bdd locale, peut-être que ça a changé depuis alors :/
Je viens de me renseigner auprès de ma maîtresse de stage, les quelques personnes qui vont s'en servir installeront le logiciel que je leur dirai nécessaire pour lire la bdd. Synchronisation de la bdd locale avec la maître, ce sera sûrement juste un "Suppr -> Copier + Coller" pour synchroniser, je ne pense pas que j'ai le niveau pour gérer quelque chose comme une synchronisation de bdd... (à moins évidemment que ce soit très simple mais ça je n'en sais rien).
Pour le fonctionnement de l'application, ce n'est pas moi (pauvre petit stagiaire de deuxième année dans une très grosse entreprise) qui décide de quoi que ce soit, je dois faire ce que je peux avec des indications qui me semblent de moins en moins claire au fur et à mesure que vous m'expliquez des choses...
Je vais me renseigner pour utiliser SQLite en C# alors, pouvez vous me donner une piste sur quel API utiliser pour lier les deux?
Un grand merci à vous deux pour vos réponses, c'est très gentil de votre part
Si tu connais C#, pourquoi alors ne pas l'utiliser ? Tu installes ton appli sur chaque PC utilisateur et tu mets simplement tes fichiers Word sur une ressource partagée à laquelle ils accèdent tous. Ca fait très bricolage, mais si tu n'as pas d'autre choix...
Comme philodick, je ne comprends toujours pas le besoin d'une base de données si tu ne peux supprimer les fichiers Word ... cela n'a aucun sens de dupliquer les données ... sauf dans le cas de l'itinérance où l'utilisateur n'aura pas accès aux fameux fichiers Word, et là ... SQLite pourrait être utile ...
Voliarssa a écrit:
ce n'est pas moi (pauvre petit stagiaire de deuxième année dans une très grosse entreprise) qui décide de quoi que ce soit
Bon, je sais que c'est facile à dire de l'extérieur, mais si on te dit "jette-toi du pont" ... tu réfléchis non ? Là on te dit "fais de la merde" ... ne devrais-tu pas réfléchir ?
A mon avis il te faut vraiment clarifier TOUS les aspects de cette application avant d'aller plus loin, en échangeant avec la DSI, ton maître de stage, et les utilisateurs ...
Car là tu es parti pour faire un truc bancale, plein de failles, qui va sûrement créer des problèmes d'intégrité de données (qui est à jour ?).
D'accord mais comment alors? Comment créer une bdd en C#? Si le langage est défini je ne sais toujours pas quel logiciel utilisé, ou plutôt quel API pour faire le lien entre le C# et MySQL,SQLite (ou autre)
@Benzouye : Pour le simple but de rendre les données plus simple d'accès et rapidement. Chaque page des fichiers contient 1 groupes d'informations, et quand les utilisateurs cherchent un groupe sur tout le fichier ils peuvent avoir du mal parmis les centaines qu'il y a, alors qu'une requête dans la bdd résoudrait le problème facilement.
Là c'est surtout qu'ils me disent "fais ça, avec telles contraintes et débrouille toi avec" sachant que les contraintes c'est justement ce qui est pourri, mais je ne peux pas les enlever parce que sinon c'est les futurs utilisateurs qui auront des contraintes à leur tour pour l'utilisation. Ils veulent pouvoir juste faire un double-clique sur l'application et pouf, la bdd est créée...
- Edité par Voliarssa 21 septembre 2017 à 13:54:06
Chaque page des fichiers contient 1 groupes d'informations, et quand les utilisateurs cherchent un groupe sur tout le fichier ils peuvent avoir du mal parmis les centaines qu'il y a, alors qu'une requête dans la bdd résoudrait le problème facilement.
D'où le principe de supprimer ces fichiers Word
Il faut essayer de faire passer l'idée que la source de données doit rester unique ... Si tu crées une base de données, il faut qu'elle remplace complètement les fichiers existants, et que ton application permette de faire la même chose que ces fichiers, en mieux !
Développes ton appli C# en mode "sous-marin".
Modélises le schéma de base selon les fichiers Word (cf. doc Conception BDD dans ma signature et jMerise).
Tu crées cette BDD sur SQLite par exemple (c'est le plus simple je pense) et tu la remplis avec les données des fichiers Word pour faire une base de démo.
Tu codes ton appli C# pour permettre aux utilisateurs de lire, modifier, ajouter, etc. (en fonction de droits définis) le contenu de la base ... recherche C# SQLite sur ton moteur de recherche préféré, tu trouveras des tonnes de tuto pour connecter SQLite à C#.
Une fois que le truc fonctionne proprement, tu leur expliques que c'est fini les .docx et que tout se fait maintenant avec cette magnifique application
Pour la mobilité par contre, il faut que les PC itinérant disposent de SQLite et de ton applicatif ...
Je viens de transmettre ce que tu expliques là, et la raison pour laquelle la suppression de ces fichiers est impossible est qu'ils sont aussi utilisés par des applications. Applications qui ne peuvent pas être changées sinon c'est tout le métro de Lyon qui doit être refait . Donc bref, si ces fichiers sont supprimés, plus de métro
Je pense que je vais faire ce que tu m'as dit à une exception près, je vais rajouter dans l'appli le fait de pouvoir mettre à jour la BDD depuis les fichiers Word tout en laissant la possibilité aux utilisateurs de modifier la BDD manuellement.
Je vais suivre tout ce que tu m'as dit et je reviendrais d'ici une semaine (ou peut-être moins si je bloque XD ) pour vous dire comment ça s'est passé.
Merci beaucoup pour toutes ces réponses extrêmement précises et complètes quand mes questions ne l'étaient pas du tout (et encore quand il y avait des vraies questions), c'est super!!
sinon c'est tout le métro de Lyon qui doit être refait
Je suis surpris que le métro de Lyon tienne sur des fichiers Word Et encore plus surpris que plusieurs applications s'appuient sur une source de données aussi instable qu'un fichier Word.
A mon avis on essaye de la faire à l'envers au "pauvre petit stagiaire de deuxième année dans une très grosse entreprise" ... Tu es en stage dans un service informatique ? Enfin passons, ce n'est pas grave ...
Voliarssa a écrit:
je vais rajouter dans l'appli le fait de pouvoir mettre à jour la BDD depuis les fichiers Word tout en laissant la possibilité aux utilisateurs de modifier la BDD manuellement.
Surtout pas malheureux ! Principe de base : Il doit exister une seule source de données maître ! Donc si les fichiers Word sont conservés, ils doivent être la source de données de référence. A toi d'assurer que ta base de données "dupliquée" est à jour, en faisant par exemple un import à chaque ouverture de ton application. Tu écrases les données existantes dans ta base par les données actuelles des fichiers Word ...
Après, si tu sais parser les fichiers Word depuis C#, alors autant se passer de BDD intermédiaire et directement interroger les fichiers Word. A l'ouverture de ton application tu charges les fichiers Word, tu les parses et créé des tableau (array) te permettant ensuite de faire des recherches dedans ...
En situation de mobilité il faudra par contre que l'utilisateur "embarque" les fichiers Word avec lui ...
J'ai beaucoup de nouvelles informations, je ne suis plus autant dans le flou qu'avant. Les fichiers Word que je devais parser ne servaient en fait qu'à me donner les noms de fichiers texte (une centaine de fichiers environ) dans lesquels se trouvent les informations dont j'ai besoin. Ces fichiers textes ne peuvent pas non plus être modifiés (et oui, j'ai demandé on sait jamais ^^). À l'intérieur de ces fichiers se trouvent donc les informations que je cherche sous forme de texte, et aussi le type d'information qui y est stockée. Par exemple je vais avoir :
ARRAY[0..C_Nb_Max_Gab_Pente] OF TY_F_Gab_Pente;
Qui m'indique que les informations dans un fichier vont être du type TY_F_GAB_PENTE qui lui-même est décris comme :
TY_F_Gab_Vit = RECORD
Xdeb : INTEGER;
Vitesse : SIGNED_16;
END;
un tableau de deux int.
Dans ma BDD, je vais devoir faire une seule table pour chaque fichier, ce qui veut dire que dans une seule table je dois stocker plusieurs tableaux de tableaux (ce qui en fait un tableau de tableaux de tableaux, oui c'est chiant).
Les informations dans le fichier d'exemple que j'ai utilisé sont stockées comme ça :
C'est donc un tableau de tableaux, et il y en a environ 300 de tailles bien plus importantes juste pour un seul fichier, le tout doit donc être mis dans une seule table. C'est peut-être parce que je débute juste sur les BDD, mais j'ai la tête qui fume un peu quand j'essaie de me représenter tout ça dans la BDD, j'aurais donc besoin de votre aide pour savoir si il y a une manière simple (ou juste faisable) de stocker ça dans la BDD.
@Benzouye: Je me suis renseigné auprès de ma maîtresse de stage (qui est ma marraine, elle ne se fout pas de moi ou quoi que ce soit) et si, une des lignes du métro est effectivement basée sur des fichiers Word, aussi incroyable que ça puisse paraître. Pour comprendre pourquoi, il faut se dire que ça a été fait il y a environ 30 ans et que ça représentait trop de boulot de changer la manière dont ça fonctionne. Donc des applications faisant tourner la ligne D du métro de Lyon sont basées sur des fichiers Word, je t'assure... Après il faut relativiser, ça fait quand même des années qu'il tourne et il s'en tire bien pour le moment, donc ça n'a pas été si mal fait que ça
Le problème de la modification par l'utilisateur a été réglée, il n'y en aura pas.
- Edité par Voliarssa 26 septembre 2017 à 14:42:16
C'est ce qu'il me faudrait, sauf que tout ce que vous venez de mettre est lié à d'autres valeurs encore, car c'est valable sur chaque itinéraire avec des valeurs différentes. Il faudrait donc faire une troisième table contenant (id, libelle) et rajouté dans la table indice et la table donnée une colonne itinéraire? ça ressemblerait à ça?
Parce que je suis bien conscient qu'il ne faut pas voir les choses sous forme de tableaux en BDD mais j'ai encore du mal :/
- Edité par Voliarssa 26 septembre 2017 à 16:50:19
C'est difficile de t'aider sans voir les données et leur structure ... Il va falloir te débrouiller.
Pour modéliser une base de données relationnelle, la meilleure façon selon moi c'est le modèle conceptuel de données (MCD), avec une modélisation entités/relations.
Donc le point de départ c'est de décortiquer les fichiers texte pour déterminer les entités qui y sont stockées, les relations entre elles et leurs cardinalités. Ensuite tu modélises (par exemple avec jMerise).
Tu peux venir poster ton MCD une fois ébauché pour en reparler ...
Je n'arrive pas vraiment à comprendre comment fonctionne le logiciel jMerise mais j'ai essayé de faire ça, même si c'est sans doute n'importe quoi.
Il y a plusieurs itinéraires, qui ont chacun plusieurs indices, et à chaques indices correspondent une abscisse et une pente. Je ne savais pas trop comment représenter ça sur jMerise..
- Edité par Voliarssa 27 septembre 2017 à 11:40:35
Non, car il faudrait deux relations distinctes : une entre indice et abscisse, et une entre indice et pente.
Mais de toute façon, si tu as d'autres caractéristiques qu'une abscisse et une pente tu devras modifier ton modèle, alors qu'avec le mien, toutes les caractéristiques sont stockées dans la même entité, à laquelle on donnera un type (abscisse, pente, et autres besoins).
D'accord, je ne pensais pas à ce point là (qui est pourtant essentiel vu que j'ai une centaine de fichiers avec des informations différentes dans chaques à traiter) mais c'est clairement mieux que ce à quoi je pensais. Merci beaucoup de m'avoir aidé à ce point !
App pour créer une bdd locale
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.