组织数据库以进行多源数据输入

时间:2012-01-05 13:10:22

标签: database-design

我有一个包含以下结构的数据的Web应用程序:

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

有些人通过为待定版本和历史版本保留单独的审阅表(例如REVIEW_HISTORY和其他人(包括WordPress)在主文章表中放置版本号和状态并在显示时对其进行相应过滤来实现此目的。文章给各种类型的用户(编辑,公众,管理员等)

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

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

答案 1 :(得分:0)

听起来您需要实现权限系统。这样做的经典方法是介绍"用户","角色"和权限的概念。

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

您还创建了一个名为" CompanyX内容创建者"的角色,他只有权为产品a,b和c创建评论。用户Xavier可能担任该角色。

然后,您需要修改内容创建和发布过程,以了解每个步骤所需的权限。您可能还需要介绍" status"的概念。 (可能是@JoelBrown写的版本)用于评论 - 初始状态可能是" draft",只有角色中的用户"我的内容编辑"可以将其移至状态"已发布"。

对于这种要求,这是一个非常标准的结构;如果你有一个很好的应用程序,它会更容易。