我正在为新系统设计一个全新的数据库模型。我的目标是将它存储在SQL中并通过Entity Framework映射到对象中。我大量使用Table-per-Hierarchy模式来支持复杂的对象层次结构并使其得到强制实施"正确"由数据库引擎。
我有以下情况,我不知道如何处理:
我有一组名为Resources的实体。每个资源都是特定类型,包含许多特定属性。
我还有许多名为Checks的实体。每个资源都包含许多检查。 ResourceId是Checks表中的外键。支票稍微有点儿。存在一些或所有类型的资源共有的检查类型。并且有一些Check类型非常特定于某些类型的资源。更确切地说:
所以,我的问题是如何映射ERD和Entity Framework中的Checks。最直接的方法是创建几十个表,每个表都有一个Resource类型和Check类型的特定组合。 IE:ServerOutageCheck,StorageOutageCheck,UrlOutageCheck,UrlSslExpiraitonCheck,ServerLowMemoryCheck等。
这似乎有点难以管理和维护。我希望能够在单个表中共享公共检查,特定于该公共检查(即:OutageCheck),并且仅偏离特定于资源的检查(即:SslExpirationCheck)。这可能吗?或者从表管理的角度来看,O ^ 2是我能做的最好的事情吗?
最后的想法。我的数据库是非常频繁的读取和非常不经常写入。如有必要,我也可以将读取的内容缓存出来。
答案 0 :(得分:0)
我将推荐您使用三个标签,并建议您特别注意每个标签中的信息标签。
single-table-inheritance class-table-inheritance shared-primary-key
单表继承就像你标记的table-per-hierarchy一样。 “信息”选项卡讨论了在单个简单表中包含大量NULLS所带来的欢乐和困境。
类表继承是一种替代方法,它只在属性有意义的表中放置属于某些子类的属性。
共享主键是一种设计技术,它允许您强制实现子类/超类关系的一对一性质,并且还为您提供了一种将特定数据与通用数据相结合的便捷方式。
我要说的大多数内容只会重复三个标签中信息标签中的内容。您也可以找到与您的案例相关的相关问题和答案。