2014-06-29 64 views
0

我正在开发一个项目,每天人们选择某些插槽。然后我匹配那些在同一个位置上的人。我正在使用一个单独的表来实现这一点。我使用目前的设计是在数据库中实现匹配

user_id (FK to user table) 
created 
updated 
slotno (int) 

等效Django模型

class Slots(models.Model): 
    user_id = models.ForeignKey(User, related_name='user_id') 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    slotno = models.IntegerField(blank=False, null=False) 

问题是

  1. 该表将随着时间变得非常大,导致 提高SQL的复杂性查询(一种可能的解决方案可以是 来设置检查所有行的时间戳的作业,并且 删除行超过24小时)
  2. 当我查询数据库中所有处于同一 插槽中的用户时,过去任何时候在 之内的所有用户也将显示(MAJOR FLAW)

这个设计绝对有缺陷,但我无法想出一个好的设计来实现该功能。我是数据库设计的一名不起眼的人,这是我第一次实施一个不平凡的数据库设计。

PS:我正在使用django 1.6.5和mysql。

+0

有多大? MySQL支持在日期范围上进行分区,即使在数以亿计的行上也可以实现极其高效的查询。或者,您可以每天,每周,每月将数据归档,具体取决于您的使用情况。你能举出一些预期用例/查询的例子吗? –

回答

1

你的查询是什么样的?

如果你只是想今人其数据库条目的创建,你可以不喜欢

from datetime import datetime 

today = datetime.today() 
today = datetime(today.year, today.month, today.day) 

然后你可以过滤在此基础上,例如

your_query.filter(created__gte = today) 

至于数据库的大小 - 如果这真的会给你一个问题,你可以实现一个档案系统。也许是每天运行一次的cron作业,并将旧条目写入.csv文件或单独的数据库或其他内容。