我正在尝试对时间表、计费时间、项目、用户进行建模
在数据库中表示这些的最佳方式是什么
详细说明这个问题:我最大的困境是如何将日期、时间和项目保持在一起
一种可能的解决方案
用户(PK id,名称)
项目(PK id、名称、FK user_id)
BillableHour(PK id、FK project_id、小时、日期)
谢谢
从您想要的报告开始,然后向后工作。
最小输入单元是活动、持续时间,但如果你使用这个最小值,你最终会得到诸如 sri.attends.scrum.for.parisian.branch.of.client50.via.scype.from.home.to.discuss 之类的活动.installation.routine.of.zoom22,你的报告代码会有很多switch语句。
假设您将拥有至少一份报告,其中包含名称、活动描述和给定时间段的总时间。如果这是您唯一的报告,您可以将其实现为四字段列表:Worker(字符串)、Task(字符串)、Start(时间)、Duration(整数)。如果有一份报告要求提供曾经分配给特定项目的所有活动,或者一份要求所有花费在活动类型 X 上的时间,或者一份将活动分配给特定客户的报告,那么您的设计将受益于更多字段。
也许您有一份报告可以区分在家庭办公室安装.server.updates 和在战区中敌人主动炮火下安装.server.updates。如果您的时间记录屏幕上有一个“while.a.target”复选框,那么这可能会真正为您的用户节省时间。
这是我的旧会计系统使用的一些表格的简短(且不完整)摘要:
如果您不熟悉范式,则值得学习范式。节省您在数据库中存储冗余数据(以及其他好处)。
http://databases.about.com/od/specificproducts/a/firstnormalform.htm
我可以从一个非常高的层次告诉你我是如何在一个非常简单的计时应用程序中做到这一点的。虽然,这不一定是最好的方法。
目前我没有方便的 ER 图可以分享,但这只是一组表的一个非常基本的起点。
用户名 PK
UserRole UserID FK RoleID FK
角色 ID PK 名称
UserProject ID PK UserID FK ProjectID FK HoursAvailable
客户 ID PK 名称
项目 ID PK CustomerID FK
EntryType ID PK 名称(即计费、不可计费等)
条目 ID PK UserID FK ProjectID FK EntryTypeID FK Hours Date TaskName(这可以进一步规范化,尤其是如果你想要一个任务桶) 描述
我可以继续,但你明白了。