gpt4 book ai didi

mysql - 用户创建的数据库结构: non-relational or relational databases?

转载 作者:IT老高 更新时间:2023-10-28 13:16:30 27 4
gpt4 key购买 nike

我想在我的数据库记录中包含动态字段。

例如:我想构建一个应用程序供用户创建自己的表单。

用户可以创建以下表单:

个人资料:

  • 全名
  • 街道
  • 工作
  • 电话
    • 首页
    • 工作
    • 移动
  • 兴趣
    • 兴趣 1
    • 兴趣 2
    • 兴趣 3

工作:

  • 名字
  • 姓氏
  • 工作
    • 部门
      • 专业 1
      • 专业 2
    • 部门
      • 专业 1
      • 专业 2

国家:

  • 美国
    • 状态
      • 纽约
        • 城市
          • 纽约
          • Foo
      • 阿拉巴马州
        • 城市
          • 酒吧
          • 巴兹

如您所见,这是一个非常动态的结构:

  • 没有预定义的字段数
  • 没有预定义的字段名称
  • 用户创建数据库结构

所以我想知道,什么是最好的数据库:关系(mysql/postgresql)或非关系(如 mongodb/couchdb/cassandra)或什至 xml 数据库(如 xindice)?

即使我为此选择非关系型数据库,在其上存储客户和账单信息等安全关键信息是否明智?

我听说有人说,如果您的信息需要唯一性,那么请使用关系数据库。 “我们不想冒险给我们的客户开两次账单”。它们实际上意味着非关系数据库上的什么问题?您不能将唯一数据存储在非关系数据库中吗?

我正在考虑的另一件事:将数据保存在非关系数据库中是否意味着我将有重复的条目?

考虑这个例子:

分类:

  • 办公室

    • 应用
      • 文本伴侣
        • 作者:Foobar
        • 价格:120
        • 作者:Foobar
        • 价格:120
  • 办公室

    • 应用
      • 文本伴侣
        • 作者:Foobar
        • 价格:120
      • 酒吧
        • 作者:Foobar
        • 价格:120

如您所见,存在相同条目的情况。非关系数据库如何处理这些?我太习惯关系数据库了。

我总结一下我的问题:

  • 用户创建的数据库结构是什么类型的数据库?
  • 是用于存储安全关键信息的非现实数据库吗?
  • 非现实数据库如何处理重复?

最佳答案

我强烈建议您查看 CouchDB为此。

  1. 您使用简单的 REST API 与 CouchDB 进行通信。换句话说,它是“Made of the Web”,而不是像 MongoDB 等那样简单的后端数据库。 CouchDB 实际上可以提供表单并接收提交,因为它有一个内置的网络服务器。
  2. 作为 JSON 文档存储,它非常适合存储结构化但无模式的数据。 (表格及其提交的文件实际上是文档,以这种方式对其进行建模更有意义,IMO。)
  3. 您可以轻松地将描述每个 Web 表单的 JSON 文档存储在与表单提交相同的“存储桶”中。 (CouchDB 甚至可以解析表单 POST 并将它们转换为 JSON 文档,但您认为合适。例如,让它自动为表单提交添加时间戳很简单。)
  4. 您可以编写所谓的“_show”函数来实际在 CouchDB 中生成每个表单的 html 代码。另请查看“_update”和验证功能。
  5. 它具有您需要的安全功能。
  6. 可以轻松识别文档冲突。更好的是,CouchDB 会自动确定文档的“获胜”版本,但您将继续访问“失败”的文档版本(直到您告诉 CouchDB 压缩数据库,这会删除旧修订。)
    • 关于唯一性:您需要分配一个真正代表唯一表单提交的 _id,而不是让 CouchDB 生成唯一的文档 _id。如果每个用户只允许每个表单提交一次,那么对从表单提交创建的每个 JSON 文档使用以下内容:submission:user:5:form:a3df2a712

使用 CouchDB,您可以避免为用户可能创建的每个表单动态创建唯一表的痛苦。

关于mysql - 用户创建的数据库结构: non-relational or relational databases?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544813/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com