2011-02-09 163 views
0

说我在我的网站有几个注册用户。如何设置MySQL表随时间变化跟随变量?

用户都保存在单个表“用户”指派为他们中的每一个唯一的ID。

我希望让我的用户跟踪他们的开支,驱动里程,温度等

我不能肯定每个用户将永远为所有跟踪的输入变量的值,当他们登录 - 所以一个可能发生的例子是:

'example data' 
user  date   amount miles  temp etc 
1  3/1/2010  $10.00 5   54 
2  3/1/2010  $20.00 15   
1  3/12/2010    5   55 
1  3/15/2010 $10.00 25  51 
3  3/20/2010      45 
3  4/12/2010 $20.00 10  54 

什么是最好的方式来设置我的表的这种情况?

我应该在注册时创建一个专属于每个用户的表吗?

'user-1 table' 
date   amount miles  temp etc 
3/1/2010  $10.00 5   54 
3/12/2010    5   55 
3/15/2010 $10.00 25  51 

'user-3 table' 
date   amount miles  temp etc 
3/20/2010      45 
4/12/2010 $20.00 10  54 

and so on... 

应创建一个表,其基本上与上述相同的例子中的数据(可能成千上万用户独占的表的结束)? (最终可能需要梳理一个巨大的表,以查找具有所需用户标识的行)。

'user data table' 
user  date   amount miles  temp etc 
1  3/1/2010  $10.00 5   54 
2  3/1/2010  $20.00 15   
1  3/12/2010    5   55 
1  3/15/2010 $10.00 25  51 
3  3/20/2010      45 
3  4/12/2010 $20.00 10  54 

有什么建议吗?

回答

1

数据库被建立作为一组来处理类似的数据一起。

你想要的是一个单一的用户数据表,在由USER_ID同一个表拆分多个用户。您可能要进一步规范,虽然,所以它存储:

user  date   type  units 
1  3/1/2010  dollars 10.00 
1  3/1/2010  miles  5 
1  3/1/2010  temp  54 
2  3/1/2010  dollars 20.00 
2  3/1/2010  miles  15   
1  3/12/2010 miles  5 
1  3/12/2010 temp  55 
etc 

甚至进一步,如果用户+日期做出具体的行程

trip-table 
tripid user  date 
========= ======== ========= 
1   1  3/1/2010 

type-table 
typeid description 
========= ============ 
1   dollars 
2   miles 
etc 

trip-data 
tripid  type  units 
========= ======== ======= 
1   1   10.00 
1   2   5 
etc 

然而,如果你永远(或几乎总是)以输入的形式显示数据,并在所有输入列(比如电子表格)上显示数据,那么为了简洁,可编程性和性能,您最好坚持使用非标准化表单。

可以与需要进行梳理,以找到的用户ID的

假设你使用索引的正确和明智地行一个巨大的表来结束,现代RDBMS在建造时,处理巨大的数据量。索引允许查询只查找它需要的数据,所以通常将它们全部保存在一个表中是没有什么损失的。

1

没有,只是创造一切可能可空领域的一个表。如果用户没有填写该参数 - 那么只需在那里保存NULL值。

最终可能与需要梳理,以找到行的巨大的表的用户ID的

是的,查询将足够快,你是否会为user_id字段中指定的索引(对于类似WHERE user_id = 42查询)

+0

谢谢zerkms - 当创建表时,我应该把NULL作为默认的变量,如金额,英里等? – pepe 2011-02-09 02:57:29

+0

@imcl:是的,但似乎我没有正确理解你的问题。至少我认为是这样的:-S – zerkms 2011-02-09 02:59:44