Sta*_*tan 11 c# database database-design entity-framework entity-attribute-value
我需要创建数据库,其中Accountgroup
table将具有动态字段,以便Accounts
在需要时输入这些动态字段值.这可能并不重要,但我正在使用C#与EF和Linq.
这对我来说很难,因为我从来没有做过这样的事情,因为我做了我的研究,每个人都说EAV系统太可怕了,你应该设计得不同,问题是之后没有人告诉 - 怎么样?
所以也许你可以帮助我,告诉我如何在不做EAV的情况下实现类似的东西?
这就是我到目前为止所拥有的.
Joe*_*own 20
经验法则的问题在于它们很快就会从"做X通常是一个坏主意"变为"永远做X ".
EAV 通常是一个坏主意,因为它在许多方面违背了关系模式的目的,因此它消除了关系DBMS的许多特性和优势,以及构建在RDBMS上的其他技术,例如ORM,如Entity Framework.
但是,有一些设计问题,RDBMS不适合这些问题.有一些非常不合适,必须发明一种全新的技术(例如NoSQL DB,如MongoDB).
有时EAV可能是一组不完美选项留给你的最佳选择.如果你不能(不能)知道你的架构是什么,那么EAV可能是你最好的选择.如果您的架构变得不重要,则尤其如此.例如,考虑一个在线产品目录,其中有大量的产品列表,每个产品都有一些功能.您无法提前预测哪些产品具有哪些功能.最后,您对产品功能的唯一做法是将它们转储到"feature:value"列表中.这种情况下架构并不是特别强大,所以用EAV击败它并不是特别具有破坏性.
最重要的是要了解您的设计选择将对您的功能和操作做些什么.所有设计都是权衡取舍.关键是要有意识地进行权衡.而不是"EAV是邪恶的",而是改为:"EAV是一把装满枪的枪,确保你知道你指着它的脚."