2011-11-20 33 views
0

我正在制作一个网站,允许用户在桌面上注册并记录他们的日常活动。他们的活动将存储在MySQL数据库中,并将使用jQuery/PHP进行显示。构建用于记录用户大量动态数据的数据库

下面是数据类型的示例图片存储enter image description here

的问题是,我不知道如何正确地存储这种类型的信息。

我原本打算为每个用户创建一个表,名为$userid . "_activies"或沿着这些行的东西,列id, user_id, type, location, duration, date。然后为了读取数据,我会简单地检查他们想要的日期并加载所有符合该日期的活动。这工作正常,但我不知道如何正确更新现有的条目。

例如:在上面的图片中,如果你想改变“厨房”行的持续时间,你将如何去检测它是否已经存在于数据库中?你不能简单地在2012年11月18日检查包含“清洁”和“厨房”的行,然后覆盖它,因为厨房可能在清洁部分出现多次(例如,他们在去清洁厨房后第二次清洗厨房浴室)。

我本来想过让每个<tr>必须等于该加载它,那么当它的时间来保存数据的数据id领域的ID,检查排id已经存在,覆盖它。这对我的问题似乎是一个糟糕的解决方法。

我希望能够完全清除整天的原始数据,并在保存时使用表中包含的任何内容重写它。只删除表中与表的日期相匹配的每一行,然后写入新的信息是否合理?或者有更好的方式来存储这些信息。例如,我应该为每个用户每天创建一个新表吗?这似乎很多表...

我很难过,任何人都可以分享任何想法建立数据库的方式?

回答

2

我非常相信将数据保存在逻辑块中。如果这意味着保持一切合乎逻辑,不要害怕使用更多的表格。仅仅基于你说我会至少有如下表:

用户(USER_ID,USER_NAME,密码,电子邮件,...) 位置(LOCATION_ID,LOCATION_NAME,...) 持续时间(duration_id,duration_length (在5,10或15分钟的时间段内从最小的持续时间增加到最大的持续时间) 活动(activity_id,activity_name,activity_description,activity_user(user_id),activity_date,activity_location(location_id),activity_duration(duration_id) ...)

同样,这是基于您的问题中描述的元素。这样,所有内容都将存储在Activity中,而且您显然希望为activity_user编制索引。您只需将活动添加到活动中,然后根据activity_user和activity_date进行显示。希望这可以帮助。

ETA:我意识到我没有回答你最终的问题。正如我所说的,您将在活动中输入新的活动,并且,如果您希望只维护给定用户的最新记录,则只需删除user_id的所有活动,其中activity_date不是最近的日期。提供示例代码很困难,因为我不确定你的意思。我希望我至少能够正确地传达基本知识。

+0

那么主要问题是每天更新数据。例如,如果每一天都有自己的活动表,那么我可以删除整个表并用新数据重新创建它,但我不确定这是不是很好的做法,并且会创建大量的表(1每个用户每天的表)。 – Sandoichi

+0

另外,在你的解决方案中,你会为每个用户创建一个单独的活动表吗?示例:用户332将读/写表:activity_332?或者每个用户只有一个巨大的活动表? (我认为一张桌子会变得太大,这可能会减慢查询的速度吗?) – Sandoichi

+0

也许我并没有正确理解你的问题。我不认为每天都需要自己的桌子,除非你真的打算为每天更新的人们绘制强硬的线条。如果用户错过了一两天怎么办?你想让他们回到一个完全空白的屏幕?将它们的最后一天的活动存储到再次更新之前似乎更有意义。在这种情况下,一旦user_332登录并记录他12月13日的第一个活动,您可以简单地删除user_332的所有记录,其中activity_date不等于12月13日。 –