计划的数据库设计

时间:2010-10-23 13:02:32

标签: sql mysql database database-design

我正在创建一个Web应用程序,其中用户应该能够指定他们的每周计划。这是我的数据库模型:

id
user_id
day
from
to

day是一个0-6的枚举(星期日为0,星期一为1,依此类推)。 fromto代表午夜时分。所以,0代表午夜,1代表12:01 am,2代表12:02 am等等。

这是一个好设计吗?有任何潜在的问题吗?

如果我希望显示超过一周的能力怎么办?我该怎么处理?现在,我只是显示每周工作时间表,但能够指定更多工作时间可能会很好。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

首先,我会尝试让设计更加开放。像

这样的东西
id
User_id
Date
Start_Time
End_Time

这样你就不会限制自己一周。此外,使用日期和时间可以更容易地进行计算。拥有它们很容易获得一周中的某一天,午夜时分等等。

使用此功能,您还可以轻松获取周数,这样您就可以通过选择一年中的一周和/或开始日期向用户显示他们的日程安排。

此设计假设您没有从一天开始到下一天开始的时间表。在这种情况下,您需要一个Start_Date和一个End_Date。

希望这有帮助

答案 2 :(得分:2)

请不要重新发明轮子。这是编程和开发任何东西最强大的思想之一。

我的意思是,每当你有可能依赖内置或本机类型时,你应该使用它。在字段,您可以而且应该考虑使用适当的原生类型,例如日期,< strong>日期时间,时间戳

此外,如果您需要对这些数据进行检索,过滤等,则可以使用内置函数。

这种设计思维可以提高数据的可靠性,使编程更容易,因此您可以依赖正确,经过测试和广泛采用的函数和数据类型。

我会这样做数据库:

id -- autoincrement
Start -- datetime
End --datetime

我想你有一个Users表。我还要添加一个表UsersSchedule,如:

user_id -- FK to users
schedule_id -- FK to schedule

因此,许多用户可以注册到同一会议或活动。当然,这可以更进一步,并添加其他控制字段,如EventName,EventPromoter(来自支持者用户的user_id),邀请(邀请参加活动的人的用户ID列表),参加者(确认/参加活动的用户ID列表) )......但这个决定取决于你。

请注意,我会大量使用DateTime函数(http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html)以节省逻辑编程,例如< em>查看今天为特定用户安排的活动,特定用户的冲突事件,等等。

嗯,我认为你明白了。

修改

假设您有一个条目,如:

id   |        start        |        end
45   | 2010-10-25 09:00:00 | 2010-10-25 18:00:00

您可以运行查询:

SELECT CONCAT(
DATE_FORMAT(start, '%a'), ', ',
DATE_FORMAT(start, '%l%p'), ' - ',
DATE_FORMAT(end, '%l%p')
) as Event FROM schedule WHERE id = 45;

这会给你以下输出:

Mon, 9AM - 6PM

完成。

答案 3 :(得分:2)

好吧,我认为其他回答者偏离轨道的地方是他们正试图设计一个万年历。我想你只想设计一个系统来显示例如工人的定期重复的每周时间表。

对于这种使用,定期,重复的每周时间表,您的设计是可以的。我会将FROM和TO设为TIME列而不是整数,但这就是它。

如果您打算跟踪实际工作的时间,您将不得不为其他用户提及的更多表格实施第二个表格。