超过10列的唯一约束

时间:2010-06-09 09:53:41

标签: database database-design unique-constraint

我有一个时间序列模拟模型,它有10个以上的输入变量。不同的模拟实例的数量将超过100万,每个模拟实例每天都会生成一些输出行。

为了将模拟结果保存在关系数据库中,我设计了这样的表。

  

创建表SimulationModel(

     

simul_id整数主键,

     

input0 string / numeric,

     

input1 string / numeric,

     

...)

     

创建表SimulationOutput(

     

dt DateTime主键,

     

simul_id整数主键,

     

output0 numeric,

     

...)

为了使每个模型都是独一无二的,我正在考虑以下几种方式。

  1. 对SimulationModel表的所有输入列设置唯一约束

  2. 重新设计SimulationModel表,将输入列分组为2~3列,并对这些分组列设置唯一约束。 (通过制作长字符串值,如“input0_input1_input2”)

  3. 忘记服务器端约束并在应用程序端执行该任务。

  4. 您如何看待这些选择?

    在包含数百万行的超过10列上使用唯一索引是否没有问题?

    还有其他方法可以推荐吗?

    (我可以使用postgresql)

5 个答案:

答案 0 :(得分:1)

如果您为simulationmodel创建两个表,如下所示:

Table SimulationModel {
id: integer,
...
}

Table SimulationModelInput {
simulationmodel_id: integer foreign key(SimulationModel.id),
input: string or numeric,
...
}

然后你可以在(simulationmodel_id,input)上放置一个约束,但获取配置的查询更复杂。

答案 1 :(得分:1)

唯一索引是确保每组输入都是唯一的方法。

答案 2 :(得分:1)

创建unqiue约束。 10列有几百万行并不是一个很大的表。此外,您的测试可能会因使用索引而受益 - 或者至少索引不会造成任何伤害。

答案 3 :(得分:1)

您可以创建一个“唯一”列,该列是其他列的哈希值,并将其称为标识。

答案 4 :(得分:1)

我将处理应用程序中的唯一性约束,特别是如果只有一个进程正在创建模拟。然后,您可以在常用筛选的输入列上拥有一个或多个非唯一索引,以便高效访问。