今天再次提出如何处理允许用户将自定义字段添加到产品数据库中提供的标准实体模式。我赞成实际上提供一个为用户提供有限DDL函数的函数,因此他们实际上可以向表中添加一个新的自定义字段。另一种方法是为自定义字段设置单独的表,例如客户和CustomersEx,只有CustomersEx可以更改,但这里的更新变得比平常更棘手。我们讨论的最后一个也是最糟糕的选项是提供一个EAV表,其中行是实体名称,字段名称,字段值。
哪种方法最好?
答案 0 :(得分:1)
添加到现有关系结构的EAV。 SQL Server CAT(客户顾问团队)就此主题发布了一个whitepaer。虽然是特定于供应商,但讨论的原理和建议的解决方案适用于大多数RDBMS:Best Practices for Semantic Data Modeling for Performance and Scalability
答案 1 :(得分:1)
我赞成你的第二个想法。我们做类似的事情,但调用表Attr [ibute]表,例如公司,公司Attr。属性是业务对象(1:M)中的集合,NHibernate处理数据库操作。我们在UI中明确地将这些字段显示为属性,并且不要尝试将它们显示为表中的其他字段。
答案 2 :(得分:0)
我赞成通过DDL向表添加字段,但该表应与主表分开。这样,您可以对数据库架构进行脚本更改,而不会影响用户的自定义字段添加。右连接很容易完成,如果没有自定义字段,您将不需要单独表中的记录。
如果您只想以垂直方式显示数据,EAV表可能是一个不错的选择。您还可以运行数据透视查询以水平显示它们。