2010-03-26 38 views
1

我建立这是在多台机器上运行的自动化测试套件,所有报告他们的PostgreSQL数据库的状态。我们将运行一些自动化测试为此我们将存储以下信息:PostgreSQL表用于存储自动化测试结果

  • 测试ID(一个GUID)
  • 测试名称
  • 测试说明
  • 状态(运行,完成,等待运行)测试的
  • 进展(%)
  • 开始时间测试的
  • 结束时间
  • 测试结果
  • 最新的运行试验(每30秒更新一次)

的测试数量不是很大(比如几十万)和每台机器(比如,其中50)的截图有一个服务它检查数据库并确定是否应该在该机器上开始新的自动化测试。

我应该如何安排我的SQL表来存储所有信息?是一个单列表,每个属性都有列吗?

如果将来我需要添加属性,但要保持与旧的数据库格式不兼容(即我可不想删除,并创建多个列的新表),我应该如何着手?新属性应该放在不同的表中吗?

我也想复制的数据库。如果出现故障,我不介意最新的屏幕截图没有备份在从数据库上。我是否应该将截屏存储在自己的表中以简化复制?

回答

0

单个表格都可以。

如果你有一组冗余数据(比如说,测试状态等),你可能想把它们分解到自己的小表中(所以你存储1或2而不是“通过”)失败“,并且可以加入状态表)。

如果添加列,没什么大不了的。为确保向后兼容,请确保始终符合列名​​:

select cola, colb, colc from table... 

insert into table(cola, colb, colc) values ('x', 'y', 'z') 

确保您允许在新列中使用空值。

几千行不是postgres。

0

如果指定喜欢

INSERT INTO TABLE (Col1, Col2,..) VALUES (1, 2, ...) 

在插入列表中的列,如果您以后添加的列会被罚款。唯一的问题可能是如果你开始删除列。

更新应该被罚款,因为你已经指定列。

最终你可以用一个属性表开始,但你失去了明确的列类型,并从表中选择将是一个maintinance和性能麻烦。

因此,创建表格,然后在插入时确保指定列名称,然后当您更改表格结构(添加新列)时,这应该不是问题,除非它们已设置不为null,在这种情况下,您可能必须指定一个默认值。