简单统计项目的数据库模式

时间:2010-12-24 00:18:18

标签: database-design

背景幕:

我有一个cvs文件的文件层次结构,用于多个位置,按照它们所涵盖的日期命名...按月专门。文件夹中的每个cvs文件都以该位置命名。

例如”, 文件夹名称:2010-feb

包含: location1.csv location2.csv

每个CSV文件都包含以下记录:

2010-06-28, 20:30:00 , 0
2010-06-29, 08:30:00 , 0
2010-06-29, 09:30:00 , 0
2010-06-29, 10:30:00 , 0
2010-06-29, 11:30:00 , 0

记录列(列名)的含义:

Date, time, # of sessions

我有一个perl脚本从这个混乱中提取数据,最初我将它存储为json文件,但我认为数据库可能更适合长期...比较年度趋势...乐趣类似的东西。

第2篇 - 我的问题/问题:

所以我现在有一个REST服务,用一个测试数据库来咳嗽json。我的问题是[我厌倦了数据库设计],如何最好地为此设计数据库后端?

我认为以下表格就足够了并保持简单:

Location: (PK)location_code, name 
session: (PK)id, (FK)location_code, month, hour, num_sessions

除了一个月或几个月的星期几之外,我还需要能够平均每周的每个小时的会话(加上最小和最大)。我一直在使用perl哈希来做这件事,我正在尝试决定如何最好地用数据库来实现它。

您认为应该使用存储过程吗?

对于数据库,根据这里收集的信息,它将是postgresql或sqlite。 如果postgresql没有令人信服的理由,我会坚持使用sqlite。

我应该如何以及在何处将数据与营业时间进行比较。我正在存放时间 在yaml文件中的操作。我目前将数据中的小时与yaml中的哈希“匹配”来执行此操作。数据库会打开更简单的方法吗?我想我会像现在这样进行比较然后插入数据。可以召回:

SELECT hour, num_sessions FROM session WHERE location_code=LOC1

由于只有几个小时的操作,我不需要担心。 我应该像现在一样计算所有结果,然后存储为统计表 不同的'报告'?这,而不是按需处理?这看起来怎么样?

无论如何......我絮絮叨叨。

感谢阅读!

Bubnoff

1 个答案:

答案 0 :(得分:0)

从我读到的SQLite中,它提供了进行所需分析所需的功能(总和,平均等),看起来你将在自己的api级别进行,而不是允许最终用户通过界面自己完成。因此,对于简单的设计+小数据集,我将把所有数据都放到SQLite中。我也把它放在SQLite本身可以理解的格式中,这样你就可以使用它的SQL函数,而不需要先转换任何东西,也不需要创建在SQL中用来进行转换的特殊函数。

除此之外,除了月份和小时字段外,您的设计对我来说很好。我会将它们保留为完整的日期和时间字段,或者如果有适当的SQLite数据类型,可以将它们组合到一个date_time字段中,并将完整的日期/时间数据放入其中(以防您以后需要它) 。然后使用SQLite时间函数从您的完整日期/时间字段中提取适当的月份和小时。为方便起见,如果SQLite支持它,您可以在会话表中创建月份和小时的计算字段,这样您就可以立即从查询中返回您要查找的数据,而不是在您想要一个月或一小时的每个查询中明确调用时间提取函数。

此外,不要忘记将索引放在您在查询中设置条件的字段上。您可能没有注意到小数据集的差异,但随着您的数据库变大,它们可能会产生巨大的差异。