在数据库中表示时间表的最佳方式是什么
我正在尝试对时间表、计费时间、项目、用户进行建模
在数据库中表示这些的最佳方式是什么
详细说明这个问题:我最大的困境是如何将日期、时间、项目放在一起
一种可能的解决方案
用户(PK id ,名称)
项目(PK id,名称,FK user_id)
BillableHour(PK id,FK project_id,小时,日期)
谢谢
I'm trying to model timesheets, billable hours, projects, users
Whats the best way to represent these in a database
Elaborating more on the question: My biggest predicament is how to keep date, hours, project together
One possible solution
User (PK id, name)
Project (PK id, name, FK user_id)
BillableHour (PK id, FK project_id, hours, date)
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
从您想要的报告开始,然后逆向进行。
最小输入单位是“活动”、“持续时间”,但如果您使用该最小值,您最终会得到诸如 sri.attends.scrum.for.parisian.branch.of.client50.via.scype.from.home.to.discuss 之类的活动.installation.routine.of.zoom22,并且您的报告代码将有很多 switch 语句。
据推测,您将至少有一份报告,其中包含名称、活动描述以及给定时间段的总时间。 如果这是您唯一的报告,您可以将其实现为一个四字段列表:工作人员(字符串)、任务(字符串)、开始(时间)、持续时间(整数)。 如果有一份报告要求提供分配给特定项目的所有活动,或者一份要求提供在活动类型 X 上花费的所有时间的报告,或者一份将活动分配给特定客户的报告,那么您的设计将从更多字段中受益。
也许您有一份报告,区分在家庭办公室安装服务器更新和在战区敌军炮火下安装服务器更新。 如果您的时间记录屏幕上有一个“while.a.target”复选框,这可能会为您的用户真正节省时间。
Start with the reports you want and work backwards.
The minimal input unit is Activity, Duration, but if you use that minimum, you wind up with activities such as sri.attends.scrum.for.parisian.branch.of.client50.via.scype.from.home.to.discuss.installation.routine.of.zoom22, and your report code will have a lot of switch statements.
Presumably you will have at least one report with a name, an activity description, and a total time for a given time-period. If that's your only report, you can implement it as a four-field list: Worker (string), Task (string), Start (time), Duration (integer). If there's a report asking for all the activities ever allocated to a particular project, or one for all the time spent on activity-type X, or a report that allocates activities to particular clients, your design will benefit from more fields.
Perhaps you have a report that distinguishes installing.server.updates at the home office and installing.server.updates under active enemy gunfire in a warzone. If you have a "while.a.target" checkbox on your time-logging screen, that could be a real time-saver for your users.
如果您不熟悉范式,那么值得学习一下。 避免您在数据库中存储冗余数据(还有其他好处)。
http://databases.about.com/od/specificproducts/a/firstnormalform。嗯
It's worth learning about Normal Forms if you're not familiar with them. Saves you storing redundant data in your database (amongst other benefits).
http://databases.about.com/od/specificproducts/a/firstnormalform.htm
我可以从一个非常高的水平告诉你我是如何为一个非常简单的计时应用程序做到这一点的。 虽然,这不一定是最好的方法。
目前我没有方便的 ER 图可以分享,但这只是一组表的一个非常基本的起点。
用户
ID PK
用户角色
用户ID外键
RoleID 外线
角色
身份验证
名称
用户项目
身份PK
用户ID外键
项目ID FK
营业时间可用
客户
身份验证
名称
项目
身份验证
客户 ID FK
条目类型
身份验证
名称(即可计费、不可计费等)
条目
身份PK
用户ID外键
项目ID FK
条目类型 ID FK
小时
日期
TaskName(这可以进一步规范化,特别是如果您想要一桶任务)
描述
我可以继续说下去,但你明白了。
I can tell you from a very high level how I've done it for a very simple time keeping app. Although, this isn't necessarily the best way.
I don't have a handy ER diagram to share at the moment, but this is just a very basic starting point for a set of tables anyway.
User
ID PK
UserRole
UserID FK
RoleID FK
Role
ID PK
Name
UserProject
ID PK
UserID FK
ProjectID FK
HoursAvailable
Customer
ID PK
Name
Project
ID PK
CustomerID FK
EntryType
ID PK
Name (i.e. billable, non-billable, etc.)
Entry
ID PK
UserID FK
ProjectID FK
EntryTypeID FK
Hours
Date
TaskName (this could be further normalized, esp. if you want to have a bucket of tasks)
Description
I could go on, but you get the idea.
以下是我的旧会计系统使用的一些表格的简短(且不完整)摘要:
Here's a brief (and incomplete) summary of some of the tables my old accounting system used: