我希望在我的数据库记录中包含动态字段。
例如:我想为用户构建一个应用程序来创建自己的表单。
用户可以创建以下表单:
个人资料:
工作:
国家:
正如您所看到的,这是一个非常动态的结构:
所以我想知道,最好的数据库是什么:关系(mysql / postgresql)或者像mongodb / couchdb / cassandra这样的非关系数据库,甚至像xindice这样的xml数据库?
即使我为此选择非关系数据库,将安全关键信息存储在客户和账单信息上是否明智?
我听过有人说如果您的信息需要唯一性,那么请使用关系数据库。 “我们不想冒两次向客户收费的风险”。他们实际上意味着非关系型数据库存在哪些问题?你不能在非关系型数据库中存储唯一数据吗?
我想到的另一件事:不会在非关系型数据库中保存数据意味着我会有重复的条目吗?
考虑这个例子:
分类
办公室
办公室
如您所见,存在相同条目的情况。非关系数据库如何处理这些?我习惯了关系数据库。
我总结了我的问题:
答案 0 :(得分:3)
我强烈建议您查看CouchDB。
submission:user:5:form:a3df2a712
使用CouchDB可以避免为用户可能创建的每个表单动态创建唯一表的痛苦。
答案 1 :(得分:2)
如果您的数据非常适合关系模型,但您需要存储一些不是很大的动态格式化数据,那么最好将JSON,XML或类似数据存储到列中。虽然你通过这样做(索引,外键约束检查,类型检查等)失去了一流SQL类型的一些优点,但是当你的查询不关心它们的内部时,它对于存储动态结构化文档是有好处的。 / p>
如果您对通过JSON / XML /等存储大部分关系数据感兴趣,我建议您查看PostgreSQL。 PostgreSQL有XML数据类型,但我不建议使用它,因为我讨厌XML:P。没有人阻止你将JSON存储在TEXT字段中,但PostgreSQL很快就会有一个带有支持功能的JSON数据类型。 hstore contrib模块提供了一种存储键/值对的有效方法,还提供了全文索引支持。
虽然将JSON或类似内容推入SQL数据库列中,但是在关系模型面前仍然很快,但通常情况下你最好这样做(当它有意义时!)。否则,您必须向数据库解释应用程序的整个模式,从而导致许多SQL和数据库映射代码确实无法执行任何操作。
答案 2 :(得分:-1)
要选择的数据库更多地取决于您想要查询的内容和方式,而不是您想要存储的内容。所有数据库都可以让你存储任何你想要的东西。
RDBMS特别擅长基于关系模型的查询,并且可以合理地随意进行查询。通过临时过滤器和连接,您可以做各种各样的魔术。
NOSQL数据库的查询灵活性往往较低,但在其他任务中表现较好(例如在“非结构化”数据上工作得更好)。
鉴于您在此处发布的内容,我只使用SQL数据库并按用户希望定义的方式定义表。设置索引,设置查询。听起来对我来说真的没脑子。 SQL DB可以轻松处理所有“即时定义字段”的内容,因为......这就是他们所做的。所以使用它。