在架构变化方面何时选择针对平台的eav?

时间:2018-05-25 11:42:44

标签: database ef-code-first relational-database key-value entity-attribute-value

在这里阅读了一些帖子后,我找不到解决问题的方法。

我们的问题是:

我们处于十字路口,无论是使用平面表还是eav表,我个人都反对关系数据库中的非关系表。 我们有3个数据提供者模式:

  1. 不会有太大变化,让我们说3个月的变化。
  2. 也不会有太大变化,让我们说5个月的变化。
  3. 动态表单构建器,它将发生很大变化。
  4. 我认为eav仅用于最后一个提供者,另一个用于将它们平铺到关系表。

    我的一个大问题是,何时采用eav方式考虑:年度,月份的架构变化。

    顺便说一句,我们的数据库是mssql 2008 r2,服务器端代码是c#,实体框架代码优先。

2 个答案:

答案 0 :(得分:3)

您的三个不同数据提供商提供的那些数据的语义是什么?

您要在自己的系统中填充的表中设想的语义是什么?

语义如何在逻辑上映射/转换为后者?

每当noobs开始认为EAV似乎是问题的解决方案时,通常真正的问题是他们没有想过数据附带的语义。所以我的建议是退一步,花一些时间考虑语义 - 即数据的含义。

答案 1 :(得分:-1)

当您拥有包含多个列的表时,应使用EAV。有些列没有任何数据可以说是空或重复数据(比如让我们说多个员工的折扣可以是相同的,对某些人来说,这是不适用的。)。

E.g。 X 表中有一列有10000条记录。此列中只有5行包含值,其余行在此列中没有数据,因此您可以创建一个 Y 表,其中包含此列的值和 X 表格的PK。

如果您不想更改表格,EAV非常有用。就像在表格中添加新列一样。因此,在这种情况下,您将在 Y 表中添加新行。

EAV也改善了性能,就像您想要更改具有10000条记录的 X 表的列值一样。最好在 Y 表中修改其值。

注意: EAV支持关系数据库。