Database design 为多源数据输入组织数据库

Database design 为多源数据输入组织数据库,database-design,Database Design,我有一个web应用程序,其中包含如下结构的数据: 审阅(具有标题、类型、文本、年份等属性) 软件(与评论的多对多关系) 语言(与评论的多对多关系) 所有者(与审查建立一对多关系) 有一个web表单用于管理所有评论、软件、语言、所有者等,以便在站点上正确显示数据 现在,需要允许第三方修改这些审查中的数据(基本上,只有他们自己的审查),之后他们的修改应该经过审查过程,然后与现有数据合并 当出现这种需求时,最佳实践是什么(关于数据库设计)?您基本上需要一种版本控制机制。这允许随着时间的推移对每个查

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

  • 审阅(具有标题、类型、文本、年份等属性)
  • 软件(与评论的多对多关系)
  • 语言(与评论的多对多关系)
  • 所有者(与审查建立一对多关系)
有一个web表单用于管理所有评论、软件、语言、所有者等,以便在站点上正确显示数据

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


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

您基本上需要一种版本控制机制。这允许随着时间的推移对每个
查看
进行多个实例

有些人通过为挂起版本和历史版本(例如,
review\u HISTORY
)保留一个单独的审阅表来实现这一点,而其他人(包括WordPress)在主文章表中放置一个版本号和状态,并在向各种类型的用户(编辑、公众、管理员等)显示文章时根据这些信息进行过滤

编辑: 因为OP的问题是关于数据库设计的最佳实践,所以我没有讨论访问控制问题。这是我深思熟虑的选择,因为需要的是一种数据驱动的访问控制机制,允许用户只编辑他们拥有的记录。所有权建立在数据模型中这不是一个基于角色的安全性问题,尽管基于角色的安全性对于这个或任何系统来说可能也是一个好主意


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

听起来你需要实现权限系统。实现这一点的经典方法是引入“用户”、“角色”和权限的概念

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

您还将创建一个名为“CompanyX content creator”的角色,该角色仅具有为产品a、b和c创建评论的权限。用户Xavier可能担任该角色

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


对于这种需求来说,这是一个相当标准的构造;如果您首先有一个功能完善的应用程序,这会更容易。

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