首页 文章

超过10列的唯一约束

提问于
浏览
0

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

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

create table SimulationModel(simul_id整数主键,input0字符串/数字,input1字符串/数字,...)创建表SimulationOutput(dt DateTime主键,simul_id整数主键,output0数字,...)

为了使每个模型都是独一无二的,我正在考虑下面的一些方法 .

  • 对SimulationModel表的所有输入列设置了唯一约束

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

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

您如何看待这些选择?

在包含数百万行的10多列上使用唯一索引没有问题吗?

还有其他推荐方法吗?

(我可以使用postgresql)

5 回答

  • 1

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

  • 1

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

  • 1

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

  • 1

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

  • 1

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

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

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

相关问题