sql-server - 工作流网站 - 后端设计建议

标签 sql-server xml database architecture

背景:

我开始构建/设计一个新网站,该网站将跟踪大量 项目的工作流程。每个项目都有分配给它们的阶段(规划、实现、实现后、结束等...)。每个阶段包含不同的任务等。

有些人可能会问,“这听起来与其他已经存在的工作流管理软件 (WMS) 非常相似,为什么不使用它呢?

除了该站点像其他 WMS 工具一样跟踪每个阶段之外,它还需要直接从页面直接与其他系统(不同域)和软件(API/WMI)交互。它将允许我们的管理员维护 Active Directory GPO,确保使用正确的设置正确初始化新计算机,监控远程计算机上的 SQL 数据库保真度等等。对于那些认为这对问题很重要的人...我目前正计划使用 .NET 构建网站。

众所周知,商业世界中的项目和标准变化很快。因此,我希望使这个站点在每个阶段和任务方面尽可能动态和快速变化。例如,员工可能需要对每个向前推进的项目执行以前未定义的额外任务。然后,我们将需要能够快速更改所有当前打开的项目条目和所有新项目,以将新项目添加到 list 中。

问题:

根据每个人的经验,您发现存储需要经常更改新数据的大量数据的最佳方法是什么?

初步想法:

SQL/数据库存储:

优点:

  • 轻松存储大量数据。
  • 能够通过主键和外键链接项目/阶段/任务
  • 后端的存储过程有助于操作数据库并允许更改查询而无需重新编译站点。 (Big Plus!)

缺点:

  • 新的 list 项目将导致需要在每个表中创建新列。
  • 每项任务的复杂性可能会导致连接大量表。
  • 创建新列后,每个存储过程都需要修改以确保新列包含在其操作中。

XML/YAML/任何标记语言

优点:

  • 从“向前”改变的角度轻松操纵。
  • 可以轻松地在每个可以更新网页的任务阶段下创建一个新的“节点”。

缺点:

  • 将数据保存到文件具有高易变性(文件可以删除,数据无法恢复)。
  • 用户尝试同时访问文件的潜在问题会引发错误(需要在代码中构建“锁”以读取/操作文件数据)。

最终评论:

我倾向于 SQL/数据库存储,但不认为对设计/框架的更改是一项快速的壮举。如果有任何我遗漏的数据存储方法可能更适合该解决方案,请告诉我。

谢谢大家

最佳答案

需要更多详细信息才能向您推荐一些特定的存储空间。但是根据您的描述,一个项目看起来像一个包含许多属性和子项的文档,如下所示:

{
 "id": 43233,
 "name": "MyProject",
 "created": "02/01/2017",
 "owner": {
 "id": 32132,
 "name": "John Smith"
}
"tasks": [
{
  "id": 43243,
  "name": "Task1",
  "priority": "high",
  "status": "new"
 },
 {
  "id": 43253,
  "name": "Task2",
   "priority": "low",
   "status": "done"
 }
]}

如果您的应用不需要跨项目发出大量请求并且主要与一个项目一起工作,那么文档数据库可能更适合您。 MongoDB、CouchDB、Azure Document DB 等文档数据库对数据模式的限制较少,并且通常比 SQL 数据库更好地横向扩展。

因此,您可以更轻松地更改项目对象架构并添加新属性。检索项目对象也将更加容易 - 您无需执行大量 SQL 连接即可“构建”项目。

关于性能:这取决于你将如何使用数据库。对于上面的示例,您将拥有:

  1. 创建项目——一次插入到文档数据库与 4 次插入(项目、所有者、2 个任务)到 SQL
  2. 为了获得项目——一次读取与一次相当复杂的选择与连接。您拥有的项目对象越复杂,选择语句就越多。
  3. 但是,如果您需要根据某些条件过滤应用项目或任务,SQL 无疑会更方便并且显然具有更好的性能。

关于sql-server - 工作流网站 - 后端设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41679538/

相关文章:

c# - 从 SQL Server 批量获取记录的最佳方法是什么

sql - 将不同表中的两列连接成一列

sql-server - SQL 2008 数据类型 - 使用哪些?

javascript - 将 XML 文件中的数据添加到 JS 对象数组中

java - MS SQL 哈希密码与纯文本的比较

html - 从 Sql Server 中的 Html 列替换 img src

xml - 如何使 Xcode 使用自定义 DTD 进行自动完成?

java - 使用 ArrayList 打乱 xml 布局时出错

mysql - 添加外键时出错

sql - 在 SQLite 中转义表名?