我的要求是:

  • 需要能够动态添加任何数据类型的用户定义字段
  • 需要能够快速查询自定义项
  • 需要能够根据数据类型对UDF进行计算
  • 需要能够根据数据类型对UDF进行排序

其他信息:

  • 我主要是寻找性能
  • 有几百万条主记录可以附加UDF数据
  • 当我上次判断时,我们当前的数据库中有超过5000万条UDF记录
  • 大多数情况下,UDF只附在几千条主记录上,而不是全部记录上
  • UDF不被连接或用作键.它们只是用于查询或报告的数据

选项:

  1. 用StringValue1、StringValue2创建一个大表...IntValue1,IntValue2,...我讨厌这个 idea ,但是如果有人能告诉我它比其他 idea 更好,为什么会这样呢?

  2. 创建一个动态表,根据需要添加一个新列.我也不喜欢这个 idea ,因为我觉得除非你为每一列建立索引,否则性能会很慢.

  3. 创建一个包含UDFName、UDFDataType和Value的表.当添加新的UDF时,生成一个视图,该视图只提取该数据,并将其解析为指定的任何类型.不符合解析条件的项返回NULL.

  4. 创建多个UDF表,每个数据类型一个.因此,我们将为udfstring、udfdate等创建表.可能会像#2一样,在添加新字段时自动生成视图

  5. XML数据类型?我以前没有使用过这些工具,但见过有人提到它们.不确定他们是否会给我想要的结果,尤其是在性能方面.

  6. 还有别的吗?

推荐答案

如果性能是首要问题,我会 Select #6...每个UDF一个表(实际上,这是#2的一个变体).这个答案是专门针对这种情况以及描述的数据分布和访问模式而定制的.

赞成的意见:

  1. 因为你指出一些UDF

  2. 通过限制聚合或其他转换必须处理的数据量,还可以提高速度.通过将数据拆分为多个表,可以对UDF数据执行一些聚合和其他统计分析,然后通过外键将结果连接到主表,以获得非聚合属性.

  3. 可以使用

  4. 您可以完全控制数据类型的使用,

  5. 你是否需要使用外语

欺骗:

  1. 这可能会创建很多表.

  2. 还有更多的应用程序代码

其他考虑:

  1. 如果有什么关于

     'red', 'large', 45.03 
    

    而不是

     NULL, 'medium', NULL
    

    在这种情况下,你不会招致

  2. 如果你从一个地方撞到了表演墙

  3. 逻辑表格设计可以让你

Sql相关问答推荐

如何用前一个非空值替换空值?

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

如何在SQL中按每个子组的顺序更新数据?

如何根据给定条件PostgreSQL迭代减少组中的行数

SQL Select 最小优先级

DBeaver将过程中的属性列表转换为字符串

根据开始日期和结束日期的差异计算每天的计费

属于(日期)范围类型及其交集的总权重​

SQL:查询作为子查询或CTE写入的最大和数失败

按两列分组,并根据SQL中的条件返回第三个列值

用于SQL协助的XQUERY()

YEAR 函数仍然不可SARGable 吗?

在 R 值的 SQL 块中显示值

Postgresql 生成器列导致语法错误

在自引用表中使用分组和计数的SQL查询语句

如何创建一个递归计数器来查找一个元素有多少父级和子级?

如何 Select 一列具有最小值而另一列具有给定值的记录?

过滤具有一对多关系的两个表之间的数据

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

Select 给定类别列表(或更多类别)中的所有事物