日历/日程管理的最佳数据结构是什么?
我是一名中级程序员。C语言我很熟悉,Java也有一些了解,最近刚开始接触Python、Shell和Applescript,做了一些非常基础的编程。我正在为Mac OSX编写一个程序。
我想创建一个应用程序,帮助我规划日程,并让我为不同的项目安排截止日期。
我的想法是,我可以告诉程序某个任务的截止日期是2012年4月1日,并且这个任务大约需要80个小时。程序会根据一些因素,自动选择时间和日期,安排出专门用于这个任务的时间块。
这就意味着,我需要程序对时间有很详细的了解,能够处理很多日期。我需要把每一天分成至少30分钟的时间段。每个30分钟的时间块都需要检查一下,看看这个时间段是否已经安排了任务,并且要能把任务分配到这个时间块里。
所以这些30分钟的时间块必须存在于每一天,显然程序需要知道很多天的情况,至少我觉得要有一年的数据,也就是365天。
我现在在考虑怎么存储这些数据。我还没有接触过数据库,所以不太确定这是否是一个解决方案,或者这需要做些什么。
你们会怎么处理这个问题呢?我比较喜欢用C语言和/或Python来解决这个问题。
谢谢你们的任何建议。
1 个回答
我建议你使用sqlite3。你可以在这里查看Python的相关接口文档:http://www.python.org/dev/peps/pep-0249/。
当然,你也可以使用其他关系型数据库,它们的接口和sqlite3类似。不过,考虑到你应用的规模,sqlite3在使用上会更简单,而且你随时可以换数据库。它的操作很直接,适合你的应用。而且,sqlite3是比较常见的关系型数据库,所以你能找到很多相关的信息。
你也可以试试一些比较流行的非关系型数据库,比如http://www.mongodb.org/。如果你对SQL没有经验,这可能会更容易理解(不过我不太确定,你可以自己去看看)。MongoDB支持多种驱动程序(http://www.mongodb.org/display/DOCS/Drivers),但我建议在这种情况下使用Python,这样实现起来会更简单。比如说,http://docs.python.org/library/calendar.html就很好用。
另外,还有一些资源,比如针对sqlite3的https://storm.canonical.com/Tutorial和针对MongoDB的http://mongoengine.org/。根据你的经验和项目的范围,这些可能非常值得学习。实际上,随着项目变得越来越大和复杂,使用ORM(对象关系映射)层会变得更有价值。相反,如果你对SQL和关系型数据库的结构非常熟悉,那么为了一个个人项目学习新的接口可能就不太值得了。