Comment utiliser une base de données relationnelle en tant que l'un basé sur des documents?
-
20-09-2019 - |
Question
Pour faire un système de managment de documents, je suis à la recherche de documents magasins comme MongoDB, mais parce que j'ai plus d'expérience avec les bases de données régulières (Firebird, Sql Server, Mysql) Je me demande si est modèle possible un magasin de documents sur un relationnel une.
Les avantages sur un magasin de documents, schéma moins:
- Mettre en place bien à la tâche de stocker les métadonnées sur les fichiers arbitraires
- Pas besoin de mettre à jour les schémas
- Selon MongoDB, une excellente performance pour blob comme la vidéo
- évolutivité facile
Mais avec un relationnel:
- intégrité Referencial
- meilleur outillage
- Plus resilent crash & corruptions
- SQL
Alors, comment pourrait fonctionner une base de données relationnelle dans ce cas?
La solution
Un exemple simple MySQL:
CREATE TABLE Docs (
id INT,
attr VARCHAR(255),
value BLOB,
PRIMARY KEY (id, attr),
KEY attr_index (attr)
)
Une fois que vous avez que vous pouvez ajouter un attribut à un document et d'autres choses quoi que ce soit de la valeur, et vous pouvez utiliser l'auto sur la table des jointures de documents pour faire des requêtes complexes comme:
SELECT * FROM Docs AS d1, docs AS d2 WHERE d1.attr = "foo" AND d2.attr = "bar"
Ce qui renvoie des documents avec foo et attributs bar.
Autres conseils
Tenez compte de Martin Fowler le modèle de sérialisé LOB:
CREATE TABLE Documents (
documentid SERIAL PRIMARY KEY,
-- fixed relational attributes ...
document TEXT -- contains XML, YAML, whatever
);
Vous pouvez mettre des données semi-structurées avec des attributs dynamiques dans la colonne de document
. Vous ne pouvez pas utiliser facilement SQL prédicats pour rechercher ou trier par des champs dans cette blob. Mais on ne pouvait pas de toute façon - attributs variables est un concept non-relationnel, et il est difficile à les soutenir dans SQL, peu importe ce que
Vous pouvez utiliser une approche hybride, le stockage des attributs fixes dans les colonnes classiques, et tous les trucs d'attribut variable dans le blob.
Cela montre pourquoi il existe des bases de données orientées document. Ils sont conçus pour résoudre un problème que le paradigme relationnel a choisi de ne pas soutenir. Mais les bases de données orientées document ne font pas partie des choses cool que les bases de données relationnelles font, comme l'intégrité référentielle et même type de cohérence des données.