0

我正在为一个新系统设计一个全新的数据库模型。我的目标是将它存储在 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 吗?

最后的想法。我的数据库非常频繁地读取和非常不频繁地写入。如有必要,我还可以缓存读取的内容。

4

1 回答 1

0

我将向您介绍三个标签,并建议您特别注意每个标签中的信息选项卡。

单表继承就像您标记。信息选项卡讨论了在一个简单的表中包含大量 NULL 的好处和坏处。

类表继承是一种替代方法,它只将属于某些子类的属性放在该属性有意义的表中。

共享主键是一种设计技术,可让您强制执行子类/超类关系的一对一性质,并为您提供一种将专用数据与通用数据连接起来的便捷方法。

我要说的大部分内容只是重复三个标签中信息选项卡中已有的内容。您也可以找到与您的案例相关的相关问题和答案。

于 2014-06-14T12:37:00.970 回答