【问题标题】:How to extend database schema for new requirements of mandatory and optional participation如何为强制和可选参与的新要求扩展数据库模式
【发布时间】:2020-02-17 13:09:18
【问题描述】:

我有一个管理我们机构活动的应用程序。最近为员工启动了一个新程序,我被要求在同一个应用程序中处理它。这项针对员工的新计划有两条路径,第 01 组适用于最近雇用的人员,第 02 组适用于有经验的人员。

所以每年都会有 12 到 15 场活动。例如

EV-001 - Skill 01 --- Mandatory
EV-002 - Skill 02 --- Mandatory
...
EV-013 - Skill 13 --- Optional
EV-014 - Skill 14 --- Optional

新员工计划将要求他们在一年内参加 5 次特定活动,我们称之为强制性活动。多年来,这些事件可能会发生变化。明年他们可以包括不同的 5 个事件。

经验丰富的员工计划要求他们在一年内参加任意 5 场活动(从 1 到 14 场)。

我已经有以下表格

  1. 员工表
  2. 事件表(事件表有一个我最初计划使用的“事件标签”字段)
  3. 参与表(用于保存参与任何活动的记录)

所以第一个问题是如何扩展我的数据库以便我可以处理新的需求。正如我提到的,我打算使用事件表中的“事件标签”字段来声明两种类型的事件,强制和可选。对于第 01 组,我检查他们是否参加了 5 种强制性类型的活动,对于第 02 组,我检查他们是否参加了强制性 + 可选的 5 种活动。 所以问题是,如果参与者参加了两次“EV-002 - 技能 02”,那么他的参与应该只计算一次,而不是两次。

最后,我需要显示有多少人参加了这个项目,每个小组和每批有多少人完成了这个项目。

那么对于这个问题有没有灵活简单的解决方案呢?

我正在使用带有 ASP.NET/C# 的 MS SQL

【问题讨论】:

  • 您在这里没有得到任何回复,因为这不是很清楚。它是如此广泛,以至于回答这个问题的唯一方法就是为您设计数据库。这不可能发生,因为我们不知道任何实际需求。就目前而言,这是无法回答的。
  • 我已经说过我有一个完整的活动管理数据库,但我需要扩展它,以便我们可以识别参加过特定研讨会的员工。员工分为两组。必须参加特定活动的人和需要参加活动列表中特定数量的活动的人。我的问题是:我如何处理员工在数据库中而不是在代码方面所需的参与逻辑。我不知道如何简化它。
  • 好吧,我们不知道您当前的架构是什么,所以任何人都知道您需要做什么来扩展它。我了解您想要扩展您的数据库,但没有关于您拥有什么以及您正在尝试做什么的详细信息。首先发布您拥有的表的 ddl 并解释您想要完成的任务。请记住,我们不知道您的申请或要求,因此您必须比您旁边的工作人员更详细地解释事情。

标签: sql sql-server database database-design schema


【解决方案1】:

在一些同事尝试和讨论之后,我采用了一个可能对其他人有帮助的解决方案。

我创建了 5 个新表。第一个是

节目事件表
(列)
 - 事件 ID
 - 事件名称
 - 描述
 - 更多领域

第二个

计划参与者小组表
(列)
 - 组 ID
 - 团队名字
 - 描述
 - 需要强制性事件
 - 需要可选事件
 - 更多领域

第三个是

节目活动组表
(列)
 - 事件 ID (FK)
 - 组 ID (FK)
 - 强制(位域)
 - 可选(位域)
 - 如果需要更多项目

第四张桌子是

计划参与者表(列出已注册参与者)
(列)
 - 参与者 ID
 - 员工 ID (FK)
 - 组 ID (FK)
 - 批次 ID (FK)
 - 如果需要更多项目

决赛桌是

程序批次表(用于区分不同批次)
(列)
 - 批次编号
 - 批次开始日期
 - 批次结束日期
 - 如果需要更多项目

我在“计划事件组”表中填写了与该计划相关的事件列表以及每个组的要求标准。 因此,如果 Event 01 -- Skill 01 对于 Group 01 是必需的并且对于 Group 02 是可选的,那么 Program Events Group 表将有 2 个条目。

事件 01, 组 01, 1, 0, ... 事件 01, 组 02, 0, 1, ...

但是如果事件 08 -- 技能 08 是组 02 的选项,但组 01 不需要,那么它在表中将只有 1 个条目。

事件 08, 组 02, 0, 1, ...

现在我将程序事件表中的 事件 ID 添加到现有事件表中,因此如果新事件属于该程序,则将添加程序事件 ID。所以现在使用现有的参与表,也使用现有的事件表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2012-09-28
    • 2011-10-05
    相关资源
    最近更新 更多