草庐IT

用于基于角色的系统的 MySQL 数据库架构

coder 2023-10-11 原文

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

非政府组织

  • 非政府组织可以来注册帐户并创建个人资料。
  • 它创建个人志愿者或公司(在系统中注册为志愿者的员工的子集)可以申请的事件(需要志愿者帮助的工作)。
  • 非政府组织可以检查申请人的个人资料和以前的工作经历
    并接受申请。在接受他们成为一个成员
    事件。
  • 这里虽然他们在定期间隔后工作,但他们需要说 2 周
    输入他们为此贡献的小时数
    特定事件。
  • 非政府组织必须验证这个时间,以便它可以在志愿者文件中反射(reflect)为信用

  • 公司
  • 公司注册个人资料。
  • 它以特定格式的 CSV 文件上传其所有员工的列表,以添加针对自己的志愿者或发送邀请链接以要求其员工注册。如果系统中已经存在员工,我们会发送一封电子邮件,要求他验证公司的声明
  • 公司可以搜索特定任务并通过选择其所有员工或其子集来申请。
  • 在验证已完成工作的时间时,可以通过两种方式完成。 1 公司可以集中说V1 V2 V3 已经完成了2hrs 3hrs 和2hrs 并提交给非政府组织进行验证或让其每个员工手动处理并允许他们提交。

  • 我在哪里需要帮助?

    我创建了非政府组织和单例志愿者的关系。我对如何使用相同的表格感到困惑,但允许像公司这样的新实体介于非政府组织和志愿者之间并管理时间验证和事件管理。

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

    我已经为非政府组织和志愿者创建了下面的 ER 图,并且需要创建其中的公司部分。


    链接:http://i.stack.imgur.com/OMY21.png

    最佳答案

    我不确定您是否需要大量更改架构,甚至根本不需要更改。您的架构需要一个应用程序与之配合才能执行任何操作 - 您无法在此处实现所有逻辑 - 部分/大部分逻辑将在您的应用程序中。

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

    我想,这几乎就是你所需要的。当你说:

    While Validating time for the work done it can be done it two ways. 1 Company can centrally say V1 V2 V3 have completed 2hrs 3hrs and 2hrs and submit for validation from the NGO or allow each of its Employees handle this manually and allow them to submit it.



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

    I have created the NGO and single Volunteer relationships. I am confused as to how use the same tables but allow a new entity like Company come in between the NGO and Volunteer and manage the time validation and activity management.



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

    工作实例

    个人,无公司

    个人注册,在 volunteers 中创建一行 table 。他们注册了一项事件,在 ngo_activity_applications 中创建了一行。 table 。

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

    个人做了一些工作并在应用程序中记录时间,在 ngo_activity_time_validations 中创建行 table 。

    非政府组织以某种方式验证所做的工作,然后告诉应用程序这一点。这大概会改变 ngo_activity_time_validations 中行的状态表并在 volunteer_validated_times 中创建一个汇总行或匹配行 table 。规范不清楚在哪里cost_per_hour来自?

    公司

    一家公司注册并上传了一个包含 3 名志愿者的 CSV 文件。这会在 companies 中创建一行。表,加上 volunteers 中的三行表,以及 company_volunteers 中的 3 行链接表。

    公司志愿者 1 单独报名参加一项事件,一切按上述进行。

    公司注册了一项不同的事件,并自愿让所有 3 名员工参与其中。这将在 ngo_activity_applications 中创建 3 行 table 。

    非政府组织批准所有三个,在 ngo_activity_members 中创建三个新行表 - 或者删除 ngo_activity_applications 中的行表,或更改他们的 status - 规范。不清楚。

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

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

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

    非政府组织以某种方式验证所做的工作,然后告诉应用程序这一点。这大概会改变 ngo_activity_time_validations 中行的状态表并在 volunteer_validated_times 中创建一个汇总行或匹配行 table 。规范不清楚在哪里cost_per_hour来自?

    概括

    您可以通过查询 volunteer_validated_times 来查看任何个人记录了多少验证时间。表JOIN编辑到 volunteers table 。您还可以通过执行相同的查询但加入 company_volunteers 来查看任何公司记录了多少验证时间。 table 。

    可能的变化和问题:

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

    可能要添加 hourly_rate列到 volunteers表,用作默认 cost_per_hourvolunteer_validated_times 中创建行时 table 。

    关于用于基于角色的系统的 MySQL 数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16634513/

    有关用于基于角色的系统的 MySQL 数据库架构的更多相关文章

    1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

      大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

    2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

      我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

    3. Ruby Sinatra 配置用于生产和开发 - 2

      我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

    4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

      有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

    5. ruby - inverse_of 是否适用于 has_many? - 2

      当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

    6. ruby - 我如何添加二进制数据来遏制 POST - 2

      我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

    7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

      无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

    8. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

      导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

    9. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

        电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

    10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

      在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

    随机推荐