为了制作一个文档管理系统,我正在查看像MongoDB这样的文档存储,但是由于我对常规数据库(Firebird,Sql Server,Mysql)有更多的经验,我想知道是否有可能将文档存储在关系数据库之上.
关于文档存储的优点,架构较少:
适合存储有关文件的任意元数据的任务
无需升级架构
根据mongodb,BLOB的优秀表现就像视频一样
更易于扩展
但是有一个关系:
参考完整性
更好的工具
更安静的崩溃和腐败
SQL
那么,在这种情况下如何处理关系数据库呢?
考虑Martin Fowler的序列化LOB模式:
CREATE TABLE Documents ( documentid SERIAL PRIMARY KEY, -- fixed relational attributes ... document TEXT -- contains XML, YAML, whatever );
您可以将任何带有动态属性的半结构化数据放入document
列中.您无法轻松使用SQL谓词来搜索或按该blob中的字段排序.但是你无论如何都不可能 - 变量属性是一个非关系概念,无论如何在SQL中支持它们都很尴尬.
您可以使用混合方法,在常规列中存储一些固定属性,以及在blob中存储所有变量属性.
这指出了为什么存在面向文档的数据库.它们旨在解决关系范式选择不支持的问题.但面向文档的数据库并没有做一些关系数据库所做的很酷的事情,比如参照完整性甚至数据类型的一致性.