将结果数据存储在数据库中的最佳方法?

时间:2013-12-18 02:09:38

标签: database database-design

我有这样的结果数据:

1. account, name, #, etc
2. account, name, #, etc
...
10. account, name, #, etc

我每周都会生成大约1组结果数据。

目前它的存储方式如下:

DATETIME  DATA_BLOB

这很烦人,因为我无法在不将BLOB解析为自定义对象的情况下查询任何数据。我正在考虑改变它。

我正在考虑拥有一张巨大的桌子:

DATETIME   RANK   ACCOUNT    NAME   NUMBER  ... ETC
  date1      1     user1      nn      #
  date1      2     user2      nn      #
  ...
  date1      10    userN      nn      #
  date2      1     user5      nn      #
  date2      2     user12     nn      #
  ...
  date2      10    userX      nn      #

我对数据库设计原则一无所知,所以有人可以就这是一个好的方法或者可能有更好的方法给我反馈吗?

由于

1 个答案:

答案 0 :(得分:1)

如果没有一对多关系,我认为有这样的表是可以的。在这种情况下,拥有多个表会更有效,如下面的示例所示。以下是一些一般性提示:

提示:良好做法我的教授告诉我,拥有一个“ID”列总是好的,这是表中每个项目的唯一编号标识符(1,2,3 ......等等) )。 (也许这就是你的“数字”专栏的意图。)我认为SQLite强制每个表都有一个ID列。

提示:节省存储空间 - 此外,如果存在一对多关系(例如:一个名称有多个帐户),那么可能会节省空间有一个单独的帐户表,然后将名称的ID存储在第一个表中 - 这样你就可以存储许多整数而不是重复的字符串。

提示:效率 - 某些数据库具有专门用于处理多对一多对多等关系的特定框架,所以如果你使用他们的框架(我不记得究竟如何做),它可能会更有效地工作。

提示:节省存储空间 - 如果您创建自己的ID列,如果它自动包含“ID”列,则可能会浪费 - 因此您可能需要检查这种可能性。 / p>

概念示例:(存储多个同名帐户)

糟糕的解决方案: 将所有内容存储在1个表中(效率低,因为它复制了Bob的名称,等级和日期时间):

ID  NAME  RANK  DATETIME  ACCOUNT

1   Bob    1      date1      bob_account_1

2   Joe    2      date2      user2_joe

3   Bob    1      date1      bob_account_2

4   Bob    1      date1      bobs_third_account

更好的解决方案:有2个表来防止重复信息(还演示了ID的有用性)。我将2个表命名为“帐户”和“名称”。

表1:“帐户”(请注意,NAME_ID指的是表2中的ID列)

ID    NAME_ID  ACCOUNT  

1       1     bob_account_1

2       2     user2_joe

3       1     bob_account_2

4       1     bobs_third_account

表2:“名称”

ID  NAME  RANK  DATETIME 

1   Bob    1      date1      

2   Joe    2      date2      

我不是数据库专家,所以这只是我在网络编程课程中学到的一些内容。我希望这有助于引导您进一步研究正确的方向。