我的网站上有几个注册用户。
用户保存在单个表'users'上,为每个用户分配一个唯一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...
我应该创建一个与上面的示例数据基本相同的表吗? (可能最终得到一个需要梳理的巨大表来查找具有所请求用户ID的行)。
'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
有什么建议吗?
答案 0 :(得分:1)
不,只需创建一个包含所有可能可空字段的表格。如果用户没有填写该参数 - 那么只需保留NULL
值。
可能最终会出现一个需要梳理的巨大表格来查找具有所请求用户ID的行
是的,如果您要为user_id
字段指定索引(对于WHERE user_id = 42
等查询),查询将足够快
答案 1 :(得分: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可以处理大量数据。这些索引允许查询只搜索它需要的数据,因此在一个表中保留所有数据通常会受到很少的惩罚。