我正在创建一个Web应用程序,其中用户应该能够指定他们的每周计划。这是我的数据库模型:
id
user_id
day
from
to
day
是一个0-6的枚举(星期日为0,星期一为1,依此类推)。 from
和to
代表午夜时分。所以,0代表午夜,1代表12:01 am,2代表12:02 am等等。
这是一个好设计吗?有任何潜在的问题吗?
如果我希望显示超过一周的能力怎么办?我该怎么处理?现在,我只是显示每周工作时间表,但能够指定更多工作时间可能会很好。
答案 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列而不是整数,但这就是它。
如果您打算跟踪实际工作的时间,您将不得不为其他用户提及的更多表格实施第二个表格。