Comment stocker des données dans une base de données sans tables?

12

Tout ce que j'ai appris à l'école, c'est SQL qui enregistre les données dans des tables. En ce moment, je travaille sur un projet où les données sont stockées dans des fichiers XML. De plus, chaque XML contient une référence aux fichiers visuels (JPEG).

Le XML lui-même contient plus de mille points de coordonnées, ainsi que des informations supplémentaires sur les données.

À mon avis, cela n'aurait aucun sens de stocker ces informations dans des tableaux. De plus, je ne pouvais pas non plus stocker de fichiers JPEG avec SQL.

Quelle serait la solution appropriée ou y a-t-il une erreur de raisonnement de mon côté?

Comme vous pouvez le voir, je suis assez nouveau dans les bases de données. Donc, toutes suggestions, liens et conseils constructifs sont les bienvenus.

チ ー ズ パ ン
la source
SQL Server peut certainement stocker des fichiers JPEG en utilisant le type de données IMAGE. Je ne recommanderais cependant pas cela. Vous feriez mieux d'utiliser FILE-STREAM.
datagod
En ce qui concerne le stockage de jpeg (ou de tout autre fichier) dans la base de données, cela a été traité ici dans certaines de nos questions les plus fréquemment posées. Quant à la manière de stocker du XML et de trouver ces données rapidement, c'est à peu près à cela que servent les systèmes de stockage de données de documents. Je regarderais une solution NoSQL sur une base de données relationnelle, ça va être plus facile de travailler avec j'imagine.
jcolebrand
En ce qui concerne XML, DB2 d'IBM vous permet de le faire. Et vous pouvez interroger les données avec SQL ou XPath / XQuery. Leur édition Express-C gratuite est livrée avec la possibilité de le faire. Si vous passez à Enterprise Edition, vous devez payer pour activer cette fonctionnalité.
Chris Aldrich

Réponses:

11

Tout ce dont vous avez besoin est la persistance de votre XML. Utilisez une solution NoSQL ou le système de fichiers.

Il n'y a aucun avantage à utiliser un SGBDR, sauf si vous souhaitez l'utiliser à la place de NoSQL ou du système de fichiers.

gbn
la source
Quelle serait une solution NoSQL appropriée? Je travaille avec C # dans une application winform btw.
チ ー ズ パ ン
@bodycountPP: Je n'ai aucune expérience avec eux ...
gbn
7
Je vérifierais RavenDB ( ravendb.net ) ou CouchBase ( couchbase.com/couchbase-server/overview ) pour une utilisation sur Windows. D'autres peuvent être trouvés via les Googles - j'ai eu une bonne expérience avec ces produits. Évidemment, votre kilométrage peut varier :)
ITHedgeHog
10

J'ai mis en signet le billet de blog de Phil Factor Normalisation et 'Anima notitia copia' aujourd'hui car il résume parfaitement les arguments pour et contre la normalisation de certains types de données. Exécutez la requête suivante sur une instance SQL et voyez si vous êtes d'accord.

SELECT * FROM sys.syslanguages

SQL vous permet de créer des bases de données relationnelles. Cependant, même si ça sent mauvais, ce n'est pas un crime de faire des choses affreusement non relationnelles avec une base de données SQL aussi longtemps que cela est nécessaire et vous pouvez faire la différence; non seulement cela, mais aussi seulement si vous êtes conscient des risques et des implications.

Vous avez mentionné que le fichier XML contient "des informations supplémentaires sur les données". Y a-t-il un avantage à modéliser ces métadonnées dans une base de données relationnelle, à des fins d'interrogation peut-être? Si tel est le cas, il peut être utile d'extraire les données pertinentes et de conserver le XML restant en tant que type de document XML.

... si vous recevez une chaîne JSON ou XML et que vous devez la stocker dans une base de données, alors tout ce que vous devez faire est de vous demander, dans votre rôle d'Anima notitia copia (âme de la base de données) 'ai-je intérêt pour le contenu de cette information? ». Si la réponse est «non!» Ou «nequequam! Il s'agit alors d'une valeur atomique, aussi complexe soit-elle.

L'argument de Phil Factor est que les champs non relationnels dans une base de données relationnelle sont parfaitement acceptables si le champ est traité comme atomique, c'est-à-dire qu'il ne change pas, ou quand il fait tout le champ change, pas une partie constitutive de celui-ci. L'extension naturelle de cela est que si votre document contient des éléments qui vous intéressent, il peut être utile d'appliquer un modèle relationnel à ces éléments.

Relatif à la question mais surtout pour la phraséologie, une dernière citation de Phil:

Naturellement, je n'ai jamais sciemment créé une base de données sur laquelle Codd aurait froncé les sourcils, mais autour des bords se trouvent des interfaces et des flux de données que j'ai écrits qui ont causé des crises de sifflement parmi les fondamentalistes de la normalisation.

N'avons-nous pas tous!

Mark Storey-Smith
la source
2
ACORD est un peu comme ça. J'ai vu des gens essayer de le transformer en modèle de base de données. ACORD est ensuite allé sous licence pour un modèle de données de Prima, donc même ils admettent que ce n'était pas vraiment un modèle de données. La norme de messagerie ACORD comprend environ 7 000 champs définis, dont environ 200 sont obligatoires - la meilleure description d'ACORD (par une personne fortement impliquée dans les normes de messagerie) est que le «ne sait pas comment gérer un processus de normalisation».
ConcernedOfTunbridgeWells
3

En ce qui concerne les bases de données Oracle, la réponse est non . Toutes les données d'une base de données sont stockées dans des tables, même des métadonnées. Les données peuvent être stockées dans des files d'attente, mais ce ne sont que des façons différentes d'utiliser les tables. Les fichiers XML peuvent être stockés en dehors d'une base de données, mais cela ne répondrait pas à votre exigence "dans la base de données".

Au-delà de votre question, les fichiers JPEG ou tout autre fichier peuvent être stockés dans une base de données. Ils auraient besoin d'une table et d'une colonne LOB (BLOB ou CLOB). XML pourrait également être stocké de cette façon, mais l'importation des données XML dans la base de données vous permettrait d'opérer sur les données d'une manière qui ne peut pas être effectuée facilement maintenant. Il offrirait également d'autres avantages des bases de données, notamment: redondance réduite, accessibilité, concurrence, évolutivité, interopérabilité, sécurité, récupération et performances.

Si les avantages d'une base de données n'atteignent pas vos objectifs, n'en utilisez pas.

Leigh Riffel
la source
2

Il me semble que vous essayez de mettre en œuvre une base de données spatiale . Il s'agit d'une sorte de base de données relationnelle (ou d'un complément aux produits de base de données existants, par exemple Oracle Spatial, postGIS) qui prend en charge les fonctions de types de données spatiales et est utilisé pour optimiser le stockage et les requêtes de données relatives aux caractéristiques spatiales telles que les limites polygonales, les points et couches. Le XML que vous avez ressemble à des paires de coordonnées de limite et les images associées ressemblent à des éléments graphiques à afficher dans cette limite. Si les données conviennent, envisagez une base de données spatiale relationnelle qui offre une modélisation spatiale intégrée pour fournir des fonctionnalités que vous auriez autrement trouvé difficiles ou longues à implémenter.

lotsoffreetime
la source
De plus, si vous êtes implémentez un système d' information géographique , pensez à poser cette question sur le système d' information géographique .