基于角色的系统的MySQL数据库模式

时间:2013-05-19 12:11:51

标签: mysql relational-database database-schema

我们正在为非政府组织( N )开发一个平台,通过个人志愿者( V )或志愿者通过公司完成工作( C

NGO

  1. 非政府组织可以注册一个帐户并创建个人资料。
  2. 它创建活动(志愿者需要帮助的工作),个人志愿者或公司(在系统中注册为志愿者的员工子组)可以申请。
  3. 非政府组织可以查看申请人资料和以前的工作经历 并接受申请。在接受他们成为一个成员 活性。
  4. 这里虽然他们定期工作,但他们需要2周 输入他们为此做出的贡献时间 特别的活动。
  5. 非政府组织必须验证这一次,以便它可以在志愿者档案中反映为信用
  6. 公司

    1. 公司注册个人资料。
    2. 它会将所有员工的列表上传到特定格式的CSV文件中,以便为自己添加志愿者或发送邀请链接以要求其员工注册。如果系统中已存在员工,我们会发送电子邮件,要求他验证公司的索赔
    3. 公司可以搜索特定任务并通过选择其所有雇员或其子集来应用它。
    4. 在验证完成工作的时间时,可以通过两种方式完成。 1 公司可以集中说V1 V2 V3已经完成2小时3小时和2小时,并提交非政府组织验证或允许其每个员工手动处理,并允许他们提交。
    5. 我需要帮助的地方?

      我创建了非政府组织和单一的志愿者关系。我很困惑如何使用相同的表,但允许像公司这样的新实体进入非政府组织和志愿者之间,并管理时间验证和活动管理。

      时间验证非常重要,因为它将用于显示非政府组织,公司和志愿者的社会公平平衡(个人工作以及通过公司为事业工作)

      我为非政府组织和志愿者创建了下面的ER图,需要创建公司的一部分。

      enter image description here 链接:http://i.stack.imgur.com/OMY21.png

1 个答案:

答案 0 :(得分:3)

我不确定您是否需要更改您的架构,甚至根本不需要。你的架构需要一个应用程序来使它做任何事情 - 你不能在这里实现所有的逻辑 - 一些/大部分逻辑将在你的应用程序中。

据我了解,您的规范说所有实际的志愿者工作都是由个人完成的,其中一些人可能与公司有关,有些则不是。您的架构已经捕获了它。

我认为这几乎是你所需要的。当你说:

  

在验证完成工作的时间时,可以通过两种方式完成。 1公司可以集中说V1 V2 V3已经完成2小时3小时和2小时,并提交非政府组织验证或允许其每个员工手动处理,并允许他们提交。

这已经涵盖 - 要么每个人输入自己的工作记录,要么应用程序允许公司为他们执行 - 然后非政府组织以相同的方式验证这些记录,无论是谁输入。

  

我创建了非政府组织和单一的志愿者关系。我很困惑如何使用相同的表,但允许像公司这样的新实体进入非政府组织和志愿者之间,并管理时间验证和活动管理。

让我们通过一个有用的例子来说明这两个用例,以确保我们已经涵盖了所有内容:

工作示例

个人,没有公司

个人注册,在volunteers表格中创建一行。他们注册活动,在ngo_activity_applications表格中创建一行。

非政府组织批准他们,在ngo_activity_members表格中创建一行 - 并删除ngo_activity_applications表格中的行,或更改它的status - 规范。目前还不清楚。

个人会做一些工作并在应用中记录时间,在ngo_activity_time_validations表格中创建行。

非政府组织验证以某种方式完成的工作,然后告诉应用程序。这可能会更改ngo_activity_time_validations表中行的状态,并在volunteer_validated_times表中创建一个摘要行或匹配行。规格不清楚cost_per_hour来自何处?

公司

公司注册并上传包含3名志愿者的CSV文件。这会在companies表中创建一行,在volunteers表中创建三行,在{{1中创建3行链接表。

公司志愿者1单独注册活动,一切按上述步骤进行。

公司报名参加不同的活动,并志愿为其中的所有3人提供服务。这会在company_volunteers表中创建3行。

非政府组织批准所有三个,在ngo_activity_applications表格中创建三个新行 - 并删除ngo_activity_members表格中的行,或更改其ngo_activity_applications - 规范。目前还不清楚。

志愿者做了一些工作,公司代表公司志愿者1和2在应用程序中记录时间 - 公司志愿者3记录她自己的时间:

公司志愿者1和2 公司使用该应用程序代表他们记录时间 - 在status表中创建2行。

公司志愿者3 Volunteer 3公司使用该应用程序记录自己的时间 - 在ngo_activity_time_validations表中创建一行。

非政府组织验证以某种方式完成的工作,然后告诉应用程序。这可能会更改ngo_activity_time_validations表中行的状态,并在ngo_activity_time_validations表中创建一个摘要行或匹配行。规格不清楚volunteer_validated_times来自何处?

摘要

通过查询cost_per_hourvolunteer_validated_times编辑JOIN表,您可以查看任何个人记录的验证时间。您还可以通过执行相同的查询以及加入volunteers表来查看公司已记录的已验证时间。

可能的变化&问题:

您可能希望在company_volunteers表中添加company_entered标记,以便您可以区分个人输入的记录和公司代表个人输入的记录。如果记录与您的应用程序相关,您可能还想添加在此表中创建条目的人员的ID。

可能希望在ngp_activity_time_validations表中添加hourly_rate列,以便在volunteers表格中创建行时用作默认cost_per_hour