4

我最近继承了一个严重依赖 EAV 数据库结构的系统,并且从性能角度来看确实很挣扎。

我想要做的是使用 nhibernate 或其他合适的 ORM 产品将这些 EAV 表映射到实体,以便我们可以将行映射到属性。然后我们可以重构数据库以使其具有关系。有谁知道这是否可能?一个例子也将不胜感激!:)

为了让您了解结构,它看起来像这样:

实体 (EntityId) EntityVarchar (EntityId, VarcharValue) EntityFloat (EntityId, VarcharValue)

等等。如果我有一个客户实体,我想说 Customer.Name 来获取名称,而不是 Customer.Varchar["Name"]。

请注意,我们的系统不需要使用 EAV 模型,我们不允许对数据结构进行运行时更改,而且我认为无论如何这是一个不好的做法。

4

1 回答 1

1

我认为这不会那么容易。尽管有生成器能够读取数据库模式并生成适当的映射和类,但这只会导致现有 eav db 的访问层。要生成此数据库的关系版本,您必须读取数据并创建包含数据库中设置的值的属性的新域对象。这很可能会导致一个包含 eav 数据库中存在的所有属性的大表。因此,我认为更好的方法是通过手动分析现有数据并考虑应用程序的需求来创建关系数据库模型。特别是表继承应该是你的朋友。然后,在为这两个模式创建访问层之后,您仍然需要为数据迁移编写映射。

于 2009-07-18T09:33:56.863 回答