Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有一些用户定义字段的SQL数据库设计_Sql_Database_Postgresql_Database Design_Entity Attribute Value - Fatal编程技术网

带有一些用户定义字段的SQL数据库设计

带有一些用户定义字段的SQL数据库设计,sql,database,postgresql,database-design,entity-attribute-value,Sql,Database,Postgresql,Database Design,Entity Attribute Value,我正在开发一个数据库模式来处理数据收集,然后报告这些数据 在需求讨论之后,似乎实体属性值(entity attribute value,EAV)解决方案或平面表解决方案都可以——因为数据有点稀疏,但不是高度稀疏 然而,用户定义的字段在将来将成为必须的,但我知道使用EAV表查询和优化RDBMS可能会变得复杂 我看了一下讨论,我认为类似于选项1的选项是可能的。例如,先设置多个字段,然后设置多个备用字段,用户可以定义这些字段的标签 在报告方面,使用这种方法而不是使用EAV是否有任何缺点?您会后悔EAV

我正在开发一个数据库模式来处理数据收集,然后报告这些数据

在需求讨论之后,似乎实体属性值(entity attribute value,EAV)解决方案或平面表解决方案都可以——因为数据有点稀疏,但不是高度稀疏

然而,用户定义的字段在将来将成为必须的,但我知道使用EAV表查询和优化RDBMS可能会变得复杂

我看了一下讨论,我认为类似于选项1的选项是可能的。例如,先设置多个字段,然后设置多个备用字段,用户可以定义这些字段的标签


在报告方面,使用这种方法而不是使用EAV是否有任何缺点?

您会后悔EAV,尤其是在报告方面

  • 在尝试任何操作之前,请确保了解现有的数据模型模式:

  • 熟悉表继承:

  • 考虑允许用户修改自己的架构:

  • EAV几乎总是一个非常糟糕的主意。如果在尝试上述操作后仍然需要自定义字段,请使用具有索引的blob类型(如JSON或XML):。Postgres的二进制
    jsonb
    速度快,允许索引/查询


  • 你会后悔EAV,尤其是在报道方面

  • 在尝试任何操作之前,请确保了解现有的数据模型模式:

  • 熟悉表继承:

  • 考虑允许用户修改自己的架构:

  • EAV几乎总是一个非常糟糕的主意。如果在尝试上述操作后仍然需要自定义字段,请使用具有索引的blob类型(如JSON或XML):。Postgres的二进制
    jsonb
    速度快,允许索引/查询


  • 在Postgres中,可以使用
    hstore
    列或
    jsonb
    在Postgres中,可以使用
    hstore
    列或
    jsonb
    我将更深入地研究序列化LOB,因为它在可查询性方面似乎更容易一些。我认为用户可修改的模式并不理想,因为字段可能存在的时间很短(例如,一年中的新字段可能在下一年不存在)。这使得EAV和JSON类型字段更具吸引力,因为它们是动态的。此外,我还看到了这一点,它显示了在医疗数据收集中的一个相对常见的用法。我将更深入地研究序列化LOB,因为它在可查询性方面似乎更容易一些。我认为用户可修改的模式并不理想,因为字段可能存在的时间很短(例如,一年中的新字段可能在下一年不存在)。这使得EAV和JSON类型字段更具吸引力,因为它们是动态的。此外,我还看到了这一点,它显示了在医疗数据收集中的一个相对常见的用途。