两个变量维度的SQL表设计

时间:2012-02-02 17:43:23

标签: sql-server-2008

我需要通过参与不同年份的各种活动来记录用户获得的积分,例如:

UserName  Year   Event1 Event2 Event13 Event14 ...
 A        2001    20       30    NULL   NULL
 A        2002    15       20    30     NULL
 B        1999    7        NULL  NULL   10
 B        2000    15       10    NULL   100   
.....

用户数量不固定,事件数量也不固定。

我应该创建哪些表来实现此结果?

我目前使用的是Microsoft SQL2008。

3 个答案:

答案 0 :(得分:0)

创建User表,Event表和UserEvent表。

UserEvent会有列UserIDEventID来记录参与特定活动的用户。

答案 1 :(得分:0)

如果我理解你的问题,这可以解决它:

UsersTable
id | ...

EventTable
id | year | ...

UserEventMappingTable
id | user_id | event_id | points

然后您可以使用JOINS获取所需的所有信息。

答案 2 :(得分:0)

如果我们应用标准化的一般概念,则可以轻松地处理该场景。

首先我们定义 EventType UserType 表来定义可空和不可空类型。

然后我们创建了常用的事件用户表,其中包含eventType_id(指EventType表)和userType_id(指UserType表)。

最后,我们创建了 UserEvent 表,其中包含event_id(指事件表),user_id(指用户表)和专栏。

希望它能解决问题。如果有任何其他考虑,请告诉我。