在数据库中表示时间表的最佳方式是什么

发布于 2024-07-14 11:21:16 字数 229 浏览 7 评论 0原文

我正在尝试对时间表、计费时间、项目、用户进行建模

在数据库中表示这些的最佳方式是什么

详细说明这个问题:我最大的困境是如何将日期、时间、项目放在一起

一种可能的解决方案

用户(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

回眸一遍 2024-07-21 11:21:16

从您想要的报告开始,然后逆向进行。

最小输入单位是“活动”、“持续时间”,但如果您使用该最小值,您最终会得到诸如 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.

如梦初醒的夏天 2024-07-21 11:21:16

如果您不熟悉范式,那么值得学习一下。 避免您在数据库中存储冗余数据(还有其他好处)。

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

薄暮涼年 2024-07-21 11:21:16

我可以从一个非常高的水平告诉你我是如何为一个非常简单的计时应用程序做到这一点的。 虽然,这不一定是最好的方法。

目前我没有方便的 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.

睫毛溺水了 2024-07-21 11:21:16

以下是我的旧会计系统使用的一些表格的简短(且不完整)摘要:

  • 用户:使用该系统的人; 名称、密码等
  • 实体:公司或企业; 名称、政府 ID 等
  • 项目:可以计费的项目; 名称、供应商实体、客户实体
  • 时间表:时间表条目:用户、项目、开始时间/日期、小时数、工作描述

Here's a brief (and incomplete) summary of some of the tables my old accounting system used:

  • user: the person using the system; name, password, etc
  • entity: a company or business; name, government IDs, etc
  • project: a project that can be billed; name, supplier entity, client entity
  • timesheet: a timesheet entry: user, project, start time/date, number of hours, description of work
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文