【问题标题】:Organizing database for multiple-source data entry为多源数据输入组织数据库
【发布时间】:2012-01-05 13:10:22
【问题描述】:

我有一个 Web 应用程序,其中包含如下结构的数据:

  • 评论(具有标题、类型、文本、年份等属性)
  • 软件(与评论多对多关系)
  • 语言(与评论多对多关系)
  • 所有者(与评论具有一对多关系)

有一个网络表单用于管理所有评论、软件、语言、所有者等,以便数据在网站上正确显示。

现在,需要允许第三方修改这些评论中的数据(基本上,只有他们自己的评论),之后他们的修改应该经过一个审核过程,然后将与现有数据合并。

当这种需求出现时,最佳实践是什么(关于数据库设计)?

【问题讨论】:

    标签: database-design


    【解决方案1】:

    您本质上需要一个版本控制机制。这允许随着时间的推移每个REVIEW 的多个实例。

    有些人通过为待定版本和历史版本保留单独的评论表来做到这一点(例如REVIEW_HISTORY 和其他人(包括 WordPress)在主文章表中放置版本号和状态,并在将文章显示到各类用户(编辑、公众、管理员等)

    编辑: 由于 OP 的问题询问了数据库设计的最佳实践,因此我没有解决访问控制的问题。这是我深思熟虑的选择,因为需要数据驱动访问控制机制,允许用户仅编辑他们拥有的那些记录。所有权是在数据模型中建立的,并且必须由应用程序逻辑强加。这不是基于角色的安全问题,尽管基于角色的安全对于这个或几乎任何系统来说可能也是一个好主意。

    在我看来,OP 的问题是关于版本控制,而不是关于访问控制

    【讨论】:

    • 我终于回来解决这个问题了。您对在应用程序逻辑中实施访问控制是正确的,这(几乎)与数据库设计无关。使用多个表的版本化数据库在以前似乎是最实用的解决方案。
    【解决方案2】:

    听起来您需要实施权限系统。这样做的经典方法是引入“用户”、“角色”和权限的概念。

    例如,您可以创建一个用户角色“我的内容编辑者”,该用户角色有权为任何类型的项目创建评论,以及修改和发布任何评论。用户 Alice 和 Bob 可能担任该角色。

    您还需要创建一个名为“CompanyX 内容创建者”的角色,该角色仅有权为产品 a、b 和 c 创建评论。用户 Xavier 可能担任该角色。

    然后您需要修改您的内容创建和发布流程,以了解每个步骤所需的权限。您可能还需要为评论引入“状态”的概念(可能还有版本,如@JoelBrown 所写) - 初始状态可能是“草稿”,只有角色“我的内容编辑”的用户才能将其移动到状态“发表”。

    对于这种需求,这是一个非常标准的构造;如果您首先拥有一个精心设计的应用程序,那就更容易了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2018-01-31
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2011-12-27
      相关资源
      最近更新 更多