我正在为一个新系统设计一个全新的数据库模型。我的目标是将它存储在 SQL 中并通过实体框架映射到对象中。我大量使用 Table-per-Hierarchy 模式来支持复杂的对象层次结构,并让它被数据库引擎“正确”地强制执行。
我有以下情况,我不知道如何处理:
我有一组称为资源的实体。每个资源都是一种特定类型,并包含许多特定属性。
- 资源(抽象类,映射到资源表)
- 资源表有一个鉴别器列和一个 ResourceId 作为主键
- 类,例如:ServerResource(具体类,从 Resource 继承,映射到 1-1 到 Resource 的 UrlResources 表......总体而言,还有大约十几种其他资源类型(数量正在增长)
- 每种类型的资源都有一组特定于该资源的独特属性)
我还有许多名为 Checks 的实体。每个资源都包含许多检查。ResourceId 是 Checks 表中的外键。检查稍微有趣一些。有一些或所有类型的资源共有的 Check 类型。还有一些 Check 类型非常特定于某些类型的资源。更准确地说:
- Check(抽象类,映射到Checks表,CheckId为主键)
- OutageCheck(大多数类型的资源都支持)
- SslCertExpirationCheck(仅受 1 种资源支持)
- 等等。每种资源类型大约有 3-4 种检查类型。其中 1-2 个是在大多数资源之间共享的,而其余的则是特定资源的自定义
所以,我的问题是关于如何在 ERD 和实体框架中映射检查。最直接的方法是创建几十个表,每个表都有特定的资源类型和检查类型组合。IE:ServerOutageCheck、StorageOutageCheck、UrlOutageCheck、UrlSslExpiraitonCheck、ServerLowMemoryCheck等。
这似乎有点难以管理和维护。我希望能够在单个表中共享通用检查,特定于该通用检查(即:OutageCheck),并且仅偏离特定于资源的检查(即:SslExpirationCheck)。这可能吗?或者从表管理的角度来看,我能做的最好的事情是 O^2 吗?
最后的想法。我的数据库非常频繁地读取和非常不频繁地写入。如有必要,我还可以缓存读取的内容。