c# – 如果EAV是邪恶的,动态值使用什么?

前端之家收集整理的这篇文章主要介绍了c# – 如果EAV是邪恶的,动态值使用什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要创建数据库,其中Accountgroup表将具有动态字段,以便Accounts可以在需要时输入这些动态字段值.这可能不重要,但我正在使用EF和 Linq的C#.

对我来说很难,因为我从来没有做过这样的事情,而且自从我做研究以来,每个人都在说EAV系统是可怕的,你应该设计不同,问题是没有人会告诉他们 – 怎么样?

所以也许你可以帮助我,告诉我如何在不做EAV的情况下实现类似的事情?

这是我到目前为止.

解决方法

经验法则的问题在于,他们很快就从“通过X做错”到“永不做X”.

EAV通常是一个坏主意,因为在许多方面,它会破坏关系模式的目的,从而消除了关系型数据库管理系统的许多特性和优点,以及建立在RDBMS上的其他技术,如像实体框架这样的ORM.

然而,RDBMS不是很适合的一些设计问题.有一些这样的坏配合,必须发明一种全新的技术(例如Nosql DB,如MongoDB).

有时EAV可能是您从一组不完美的选择中留下的最佳选择.如果您不能(不能)知道您的模式是否在手,那么EAV可能是您的最佳选择.如果您的模式变得不重要,这一点尤其如此.考虑一个在线产品目录,其中有一个巨大的产品列表,每个产品都有一些功能.您无法预先预测哪些产品将具有哪些功能.最后,您只能使用产品功能将其转储到“feature:value”列表中.这是一种模式不是特别强大的情况,所以用EAV打败它并不是特别有害的.

最重要的是了解您的设计选择将对您的能力和运营做些什么.所有的设计是权衡的.关键是要有意识地取舍.而不是“EAV是邪恶的”,而是考虑:“EAV是一个加载的枪,确保你知道你指向的脚.”

猜你在找的C#相关文章