2012-03-29 32 views
0

我正在开发一个在线网站(使用Django和Mysql)。我有一个测试表和用户表。在数据库中存储的正确方法

我有表内的50个测试和每个用户按照自己的节奏完成它们。 如何将测试状态存储在我的数据库中?即来到我的脑海

一个想法是创建在用户表中的附加列。该列包含用逗号或任何其他分隔符分隔的testid。

 
userid | username | testscompleted 
1  john  1, 5, 34 
2  tom  1, 10, 23, 25 

另一个想法是创建一个单独的表来存储userid和testid。所以,我只有2列但有数千行(没有测试*没有用户),并且它们将一直持续增长。

 
userid | testid 
1  1 
1  5 
2  1 
1  34 
2  10 

回答

0

你的第二个选项是大大首选...你的第一个解决方案试图通过多个值存储在一个单一的领域,这将让你很头疼的道路打破normalization rules

第二个表不仅更容易尝试添加或删除值时保持,但也可能会表现得更好,因为你将能够有效地索引这些列。

0

有两个短语应该自动取消任何数据库的设计理念。

  • 创建每一个表[什么]
  • 含有柱[什么]由逗号

附表,两列分开的 - 在正确的轨道上存在you're。

+0

但会导致表的大小增加。这是一个公共站点,假设所有用户(比如10000)最终完成测试,将会有10000 * 50行。 – John 2012-03-30 02:41:25

+0

@John 500,000行似乎很多,但它依然是数据库标准的一个非常小的表格。假设每行包含3个int列。这是每行12个字节。 12字节* 500k行只有* 5.7MB *。 – 2012-03-30 05:56:02

+0

@John:当你将有用的数据放入表中时,表应该会增长。 – 2012-03-30 09:54:30

相关问题