Database design 最好的方法是什么:实体有这么多属性

Database design 最好的方法是什么:实体有这么多属性,database-design,entity,Database Design,Entity,我有一个实体有这么多属性,客户希望以后添加更多属性,也可能会删除一些属性 他可以随时添加或删除 所以我做了这个 但现在,当我需要添加或删除时,我需要更改3个表并添加约束 我知道这不是一个好的解决方案,但不知道还能做什么 你将如何解决这个问题 注: 属性大于40,可以是数字或字符串 我可能不会经常删除属性 编辑:关于AttributeValue我忘了提到的一点是,我需要选择已经插入的旧值中的一个,或者添加新值 现在,当我需要添加或删除时,我需要更改3个表并添加约束 是的。这是设计的陷阱之

我有一个实体有这么多属性,客户希望以后添加更多属性,也可能会删除一些属性 他可以随时添加或删除

所以我做了这个

但现在,当我需要添加或删除时,我需要更改3个表并添加约束

  • 我知道这不是一个好的解决方案,但不知道还能做什么
你将如何解决这个问题

  • 注:

  • 属性大于40,可以是数字或字符串

  • 我可能不会经常删除属性

编辑:关于AttributeValue我忘了提到的一点是,我需要选择已经插入的旧值中的一个,或者添加新值

现在,当我需要添加或删除时,我需要更改3个表并添加约束

是的。这是设计的陷阱之一。事实上这是一个较小的陷阱;等待,直到您必须编写一些报告或运行复杂的查询

但是,如果这是客户想要的

通常,EAV设计仅适用于可能属性值的数量较大,但实际值的数量较小的情况。典型的例子是患者病历,患者可能出现的症状数量非常多,但实际症状的数量可能相对较少


请注意,您的设计中最左边的表是错误的;与像
attribute1
attribute2
这样的字段不同,在最左边的表和中间的表之间应该有一个链接表,创建多对多关系。

正如您所说,可能的属性值的数量很大,但实际值的数量很小。因此,没有更好的解决方案??不是真的。好消息是,可能有意义的报道场景数量也相当少。它们本质上相当于发票和统计分析,这两者都可以在EAV模型中得到充分的管理。棘手的部分是让人们正确输入数据;你很快就会发现的。:)“什么是最好的”问题不是关于堆栈溢出的主题