[英]User-created database structure: non-relational or relational databases?
我想在数据库记录中包含动态字段。
例如:我想构建一个应用程序,供用户创建自己的表单。
用户可以创建以下表单:
个人资料:
工作:
国家:
如您所见,这是一个非常动态的结构:
所以我想知道,最好的数据库是什么:关系型(mysql / postgresql)或非关系型(如mongodb / couchdb / cassandra)甚至是xml数据库(如xindice)?
即使我为此选择了非关系型数据库,将诸如客户和账单信息之类的安全关键信息存储在其上是否明智?
我听说有人说,如果您的信息需要唯一性,请使用关系数据库。 “我们不想冒两次向客户收费的风险”。 非关系数据库实际上意味着什么问题? 您不能在非关系数据库中存储唯一数据吗?
我正在考虑的另一件事:是否将数据保存在非关系数据库中意味着我将有重复的条目?
考虑以下示例:
分类:
办公室
办公室
如您所见,存在相同条目的情况。 非关系数据库如何处理这些? 我是如此习惯于关系数据库。
我总结一下我的问题:
我强烈建议您为此查看CouchDB 。
submission:user:5:form:a3df2a712
使用CouchDB,您可以避免为用户可能创建的每种表单动态创建唯一表的麻烦。
如果您的数据非常适合关系模型,但是您需要存储一些动态格式化的数据,这些数据不是很大,那么最好将JSON,XML或类似的数据存储到列中。 尽管这样做会使您失去一流SQL输入的某些优势(索引编制,外键约束检查,类型检查等),但是当您的查询不太在意它们的内部时,它对于存储动态结构化文档非常有用。
如果您有兴趣通过JSON / XML / etc等来存储大部分关系数据,建议您使用PostgreSQL。 PostgreSQL有XML数据类型,但是我不推荐使用它,因为我讨厌XML:P。 没有人阻止您将JSON存储在TEXT字段中,但是PostgreSQL很快将具有支持功能的JSON数据类型。 hstore contrib模块提供了一种存储键/值对的有效方法,并且还提供了全文本索引支持。
尽管将JSON或类似的东西推到SQL数据库列中虽然是关系模型的事,但是您通常还是最好这么做(在有意义的时候!)。 否则,您必须向数据库解释应用程序的整个架构,从而导致很多SQL和数据库映射代码实际上什么也没做。
选择的数据库更多地取决于您要查询的内容和方式,而不是要存储的内容。 所有的数据库将使您几乎存储任何您想要的东西。
RDBMS特别擅长基于关系模型的查询,并且可以合理地任意进行。 通过临时过滤器和联接,您可以进行各种魔术。
NOSQL DB的查询灵活性较差,但在其他任务上却做得很好(例如,对“非结构化”数据的处理更好)。
鉴于您在此处发布的内容,我将只使用一个SQL数据库并按照用户想要的定义表。 设置索引,设置查询。 听起来对我来说真是不费吹灰之力。 SQL DB可以轻松处理所有这些“动态定义字段”的内容,因为...这就是它们的工作。 所以用那个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.