我希望我的数据库记录中有动态字段。
例如:我想为用户创建自己的表单应用程序。
用户可以创建以下表单:
个人资料:
- 全名
- 街道
- 工作
- 电话
- 家庭
- 工作
- 移动电话
- 兴趣
- 兴趣1
- 兴趣2
- 兴趣3
工作:
- 名字
- 姓氏
- 工作
- 部门
- 专业1
- 专业2
- 部门
- 专业1
- 专业2
- 部门
国家:
- 美国
- 州
- 纽约
- 城市
- 纽约
- Foo
- 城市
- 阿拉巴马州
- 城市
- 酒吧
- Baz
- 城市
- 纽约
- 州
正如您所看到的,这是一个非常动态的结构:
- 没有预定义的字段数
- 没有预定义的字段名称
- 用户创建数据库的结构
因此,我想知道,对于这个最好的数据库是什么:关系型(mysql/postgresql)还是非关系型,例如mongodb/couchdb/cassandra,甚至是xml数据库,如xindice?
即使我选择了非关系型数据库,将安全关键信息存储在其中是否明智,例如客户和计费信息?
我听说人们说,如果您的信息需要唯一性,则使用关系数据库。 “我们不想冒险向我们的客户收取两次费用”。他们实际上指的是非关系型数据库有哪些问题?您不能在非关系型数据库中存储唯一数据吗?
我还想到了另一件事:在非关系型数据库中保存数据是否意味着我将有重复的条目?
考虑以下示例:
类别:
办公室
- 应用程序
- Textmate
- 作者:Foobar
- 价格:120
- Foo
- 作者:Foobar
- 价格:120
- Textmate
- 应用程序
办公室
- 应用程序
- Textmate
- 作者:Foobar
- 价格:120
- Bar
- 作者:Foobar
- 价格:120
- Textmate
- 应用程序
正如您所看到的,存在相同条目的情况。非关系型数据库如何处理这些情况?我习惯于关系型数据库。
我总结一下我的问题:
- 哪种类型的数据库适合用户创建的数据库结构?
- 非关系型数据库适合存储安全关键信息吗?
- 非关系型数据库如何处理重复数据?