Mon projet actuel est de créer un système de code-barres (faute d'un meilleur Word) qui est lié à une base de données (n'a pas reçu plus d'informations ou de directions). Ma tâche consiste à faire interpréter un code-barres par un lecteur de codes-barres, à interroger une base de données qui stocke des documents MS Word et Excel (.docx/.xlsx), puis à récupérer et afficher automatiquement le document. Je n'ai pas reçu beaucoup de directives autres que lorsqu'un code-barres est numérisé, pour que le document correspondant soit récupéré et affiché automatiquement. Il n'y a actuellement aucune base de données à notre emplacement et nous stockons toutes nos informations dans des feuilles de calcul Excel.
Le processus que j'essaie d'automatiser consiste à supprimer "l'élément humain" de l'ouverture du document correct (listes de contrôle et rapports) ainsi qu'à enregistrer le document avec le format et l'emplacement de dénomination appropriés (script Excel VBA).
Il n'y a aucune raison pour que cela soit impossible, mais je ne sais pas quel (R) SGBD utiliser. Nous ne cherchons pas à dépenser de l'argent extrême (pas Oracle 11g ou 12c), mais nous partons essentiellement de zéro et nos feuilles de calcul sont réparties sur l'ensemble du lecteur en réseau. Je sais qu'il existe des options comme IBM DB2 ou MySQL ou MS SQL Server ou MongoDB ... mais je ne sais pas laquelle serait le meilleur "coup pour mon argent" et donnerait le moins de maux de tête.
Personnellement, puisque vous n'avez pas de relation au-delà du code-barres -> document, je ne pense pas qu'une base de données relationnelle soit la meilleure solution.
Si vos exigences sont vraiment aussi simples que:
Alors n'importe Le magasin de clés/valeurs devrait fonctionner. Cet article wikipedia parle d'une partie de la théorie des bases de données de documents ainsi que de certains avantages/inconvénients par rapport aux bases de données relationnelles.
Vous devrez écrire une sorte d'interface/application pour traduire la sortie du lecteur de codes-barres en une requête pour le document dans la base de données que vous choisissez. En tant que tel, vous n'aurez peut-être même pas besoin d'utiliser une base de données. Vous pouvez simplement demander à la couche application de trouver les documents dans le lecteur réseau ...
Depuis que j'étais pressé pour une recommandation spécifique. Je regarderais MongoDB . Il devrait être bon marché à exécuter, s'adaptera à vos besoins et semble bénéficier d'un large soutien. Voici un lien vers un article de blog sur le stockage de fichiers/binaires dans MongoDB.
Juste avertissement: Je n'ai aucune expérience directe avec MongoDB, et seulement une connaissance de base des bases de données de documents en général. En tant que telle, ma recommandation de MongoDB est basée sur du ouï-dire et des impressions générales.
Un autre aspect que les autres réponses ne traitent pas est votre expertise (et celle de votre groupe). Ce que vous avez décrit est une charge de travail SGBDR très générique. La plupart d'entre eux sont également capables de stocker les données binaires, jusqu'à des limites qui varient selon les différentes implémentations.
La meilleure solution pour vous est celle qui sera la plus facile à gérer et à entretenir, à long terme, dans votre environnement. Si quelqu'un possède une expertise dans une base de données particulière, ce sera probablement le meilleur choix, à moins que cela ne fonctionne tout simplement pas.
Si vous n'avez aucune expérience et personne pour l'exécuter, votre meilleur pari peut être d'utiliser une base de données open source bien prise en charge qui est relativement simple. Cela signifie probablement PostgreSQL ou MySQL. (MongoDB est notoirement complexe à déployer et à continuer à fonctionner.) Si vous êtes une boutique Microsoft, SQL Server peut également fonctionner.
Une fois que vous en avez un, assurez-vous de prendre des sauvegardes (et testez-les en les restaurant ailleurs!). Il y en aura encore plus à apprendre et à régler, mais seulement une fois que vous aurez le point douloureux.
Perspective MySQL
Si vous souhaitez charger des documents .docx
et .xlsx
fichiers dans une base de données MySQL, vous devrez utiliser la fonction LOAD_FILE () . Voici ce que la documentation LOAD_FILE () dit:
Lit le fichier et renvoie le contenu du fichier sous forme de chaîne. Pour utiliser cette fonction, le fichier doit être situé sur l'hôte du serveur, vous devez spécifier le nom de chemin complet du fichier et vous devez avoir le fichier [~ # ~] [~ # ~] privilège. Le fichier doit être lisible par tous et sa taille inférieure à max_allowed_packet octets. Si la variable système secure_file_priv est définie sur un nom de répertoire non vide, le fichier à charger doit se trouver dans ce répertoire.
Si le fichier n'existe pas ou ne peut pas être lu car l'une des conditions précédentes n'est pas remplie, la fonction renvoie NULL.
La variable système character_set_filesystem contrôle l'interprétation des noms de fichiers donnés sous forme de chaînes littérales.
Voici l'exemple de son utilisation
mysql> UPDATE t SET blob_col=LOAD_FILE('/tmp/picture') WHERE id=1;
De là, vous pouvez charger chaque fichier dans un BLOB et stocker ce BLOB dans une table.
Vous devez vous assurer que le serveur de base de données dispose d'un stockage SAN monté. Vous devez ensuite spécifier le fichier avec son chemin d'accès complet.
Encore plus de solutions/points à considérer
En plus des suggestions faites par les autres membres de la communauté, je voudrais également vous donner quelques autres points à considérer, qui sont un certain nombre de points d'apprentissage importants que j'ai repris au fil des ans tout en travaillant sur des projets similaires qui peuvent avoir avait des pièges ou des complexités très similaires à combattre!
Votre base de données initiale qui comporte des codes-barres et contient toutes les bases de données et feuilles de calcul, pourrait être décrite comme un référentiel d'actifs d'information , décrit brièvement à l'aide de métadonnées systématiques qui seraient une liste détaillée des indices qui suivent les procédures systématiques prescrites en utilisant des fichiers de recherche pour compléter un nombre unique à 13 chiffres qui serait traduit par un ordinateur utilisant un code-barres .
Les actifs informationnels comprendraient toutes sortes de fichiers électroniques, par exemple il pourrait s'agir d'une liste de trois bases de données actives ou d'un journal des documents de travail du projet du troisième trimestre, peut-être même des fichiers de projet étiquetés individuellement et de toutes les autres instances électroniques d'ensembles de données qui devraient tous être étiquetés et enregistrés en tant qu'actifs d'information.
Chaque entrée doit être systématiquement enregistrée à l'aide des listes de références appropriées pour décrire les détails du propriétaire, de l'objectif, du type, du système, du risque, des données d'élimination planifiées et d'autres ensembles de données similaires qui seraient liés ou associés.
Des mises à jour ou des ensembles de données révisés continueraient d'être développés et codés de manière identique avec tous les autres ensembles de la même source, mais des procédures de contrôle de version seraient suivies pour maintenir des journaux précis comme décrit dans le manuel des politiques et procédures de stockage des documents.
Un nouvel élément d'information ou d'enregistrement d'un ensemble de données pourrait être enregistré une fois qu'il a été créé ou obtenu, en identifiant un code à barres pour décrire le contenu/propriétaire/sujet/détails de l'ensemble de données, car le code à 13 chiffres serait décomposé pour montrer comment chaque Le code représente un ensemble de listes référencées de variables qui seraient décrites comme les champs de métadonnées dans les données globales.
Une bibliothèque de diverses versions nationales d'ensembles de données est référencée en tant que collections de données ou collections statutaires avec des hyperliens vers la source réelle. Il est courant de ne pas recréer des copies des mêmes données à moins qu'elles ne soient modifiées, qui devraient ensuite être étiquetées de manière appropriée pour refléter la nouvelle version qui décrit tous les documents ou rapports connexes qui ont été produits sur la base de jeux de données modifiés.
Les langues utilisées pour gérer les répertoires, les index, les contrôles de version et les catalogues de nombreux jeux de données ou rapports électroniques différents ressembleraient à l'architecture de l'intranet qui utilise HTML et CSS avec des fonctionnalités supplémentaires utilisant javascript et php pour fournir des pages Web dynamiques qui seraient toutes gérées par un administrateur système, mais le moteur serait un réseau complexe de diverses applications logicielles basées sur Microsoft SQL Server, MySQL et VisualBasic qui sont connectées de manière à assurer une connectivité complète entre les systèmes en cas de perte de puissance significative, avec un soutien supplémentaire des fournisseurs qui peuvent avoir le contrôle de certaines fonctions des systèmes déployés. Ceci est typique d'une grande organisation opérant sur de nombreuses plates-formes différentes avec plusieurs suites logicielles non conçues pour être connectées de quelque manière que la technologie moderne fournit des codes simples à réaliser même dans différents environnements.
J'ai également développé un index complètement différent des fichiers électroniques basé sur le schéma XML pour traiter de gros fichiers de données et enregistrer des entrées de métadonnées spécifiques sur un référentiel central. Cependant, chaque base de données a ensuite été restructurée pour suivre le schéma XML qui a ensuite permis à chaque entrée d'être utilisée comme données brutes sous-jacentes qui seraient hébergées en toute sécurité sur un intranet qui seraient facilement récupérées par les procédures et fonctions stockées MySQL basées sur des déclencheurs qui exécutaient des scripts. sur la base de différents ensembles de règles.
J'ai vu de nouveaux programmes basés sur des versions de php qui ont été introduites pour des projets très spécialisés, y compris tous les types de projets que vous avez mentionnés, donc sans prendre plus de temps, laissez-moi vous laisser un lien vers un site Web qui vous fournit probablement toute une suite de codes et de fonctions qui peuvent fournir ce que vous n'avez plus besoin de créer à partir de zéro, avec la documentation complémentaire ajoutée qui est facile à comprendre mais très détaillée.
DOCTRINE (php) et schéma Yama
Peut-être que vous seriez intéressé de connaître la solution Doctrine/Yama qui est conçue pour gérer la complexité avec des classes, des arbres, des étiquettes et des fonctions simples pour qu'il soit assez simple de voir des modèles sensés être facilement construits sans beaucoup de travail acharné dont vous pourriez avoir besoin à mettre en place et à sécuriser d'autres systèmes.
Tout ce dont vous avez besoin est un code-barres à déposer
Je voudrais simplement stocker le code à barres et le chemin du fichier en XML.
Lorsque vous chargez l'application, vous lisez le XML dans un dictionnaire.
Utilisez une recherche dans le dictionnaire pour obtenir le nom du fichier, puis lisez simplement le fichier sur le disque.
Vous pouvez utiliser n'importe quelle base de données qui stockera un binaire (ils le font tous).
Ce n'est qu'un simple tableau.
C'est une sorte de douleur de lire et d'écrire en binaire.
Il est plus facile de lire les fichiers à partir du disque et facilite la sauvegarde et la restauration.
P.S. J'écris un logiciel de gestion de documents pour vivre
Pourrait essayer le stockage de fichiers simple, utilisez simplement le code-barres comme nom de fichier. Vous pouvez également le faire sur un serveur Web si vous en avez besoin à distance. Sinon, FirebirdSQL peut gérer de grandes quantités de fichiers BLOB et c'est gratuit. MongoDB a un mode GridFS pour stocker des fichiers, pas sûr de sa facilité d'utilisation.