如何有效地对数据库中的继承进行建模?

2023-11-27

在数据库中建模继承的最佳实践是什么?

有什么权衡(例如可查询性)?

(我对 SQL Server 和 .NET 最感兴趣,但我也想了解其他平台如何解决这个问题。)


有多种方法可以对数据库中的继承进行建模。您选择哪个取决于您的需求。以下是一些选项:

每类型表 (TPT)

每个班级都有自己的桌子。基类中包含所有基类元素,从它派生的每个类都有自己的表,有一个主键,也是基类表的外键;派生表的类仅包含不同的元素。

例如:

class Person {
    public int ID;
    public string FirstName;
    public string LastName;
}

class Employee : Person {
    public DateTime StartDate;
}

会产生如下表:

table Person
------------
int id (PK)
string firstname
string lastname

table Employee
--------------
int id (PK, FK)
datetime startdate

每层次结构表 (TPH)

有一个表代表所有继承层次结构,这意味着其中几个列可能是稀疏的。添加了一个鉴别器列,它告诉系统这是什么类型的行。

考虑到上面的类,您最终会得到这张表:

table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate

对于行类型 0(人)的任何行,开始日期将始终为空。

每混凝土工作台 (TPC)

每个类都有自己的完整表格,不引用任何其他表格。

鉴于上面的类,您最终会得到以下表格:

table Person
------------
int id (PK)
string firstname
string lastname

table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效地对数据库中的继承进行建模? 的相关文章

  • 基于 .NET 4 构建的 MEF 应用程序是否可以导入针对 .NET 3.5 构建的类型?

    我正在使用托管扩展性框架开发一个主机应用程序 它是针对 NET 4 和框架中内置的 System ComponentModel Composition 程序集构建的 我希望支持使用 NET 3 5 开发部件并以声明方式导出它们的能力 由于导
  • Powershell命令Publish-AzWebApp未发布应用程序

    我有一个 Net 6 Web API 应用程序 我可以通过 Visual Studio 2022 将其发布到 Azure 应用程序服务 然后使用该应用程序 现在我想自动化它 我的 powershell 创建了一个 zip 文件 其中包含所有
  • 通过名称获取枚举成员的值?

    假设我有一个变量 其值 例如 listMovie 是一个名称enum member public enum Movies regMovie 1 listMovie 2 member whose value I want 在此示例中 我想获取
  • 永久铸造到超类

    If class Car Automobile 我可以 Car toyota new Car Automobile tauto Automobile toyota 但如果我这样做tauto GetType Name仍然会是Car 是否可以执
  • 从 Visual Studio 调试 SQL Server 2005 中的存储过程?

    我在这里和其他地方看到很多令人沮丧的问题 但没有明确的答案 我试图让存储过程进行调试 但没有成功 客户端 VS2005或VS2008 两者都不起作用 当我从存储过程上下文菜单中选择 步入存储过程 时 我在调试窗口中看到 已被用户取消 这就是
  • 工厂模式数据库连接

    我正在尝试使用 MySQL 实现数据库连接上的工厂模式 SQL Server 面临奇怪的错误 你调用的对象是空的 在 SQL 命令对象上 internal class SqlServerDB IDatabase private SqlCon
  • 没有 DateAdd() 的 SSIS 表达式前一个日期

    目前正在开发一个包 它将表达式从先前的日期传递到文件名 我当前的代码如下作为字符串变量 DT WSTR 20 DATEPART YYYY Dateadd DD 1 dateadd MM datediff MM DT DATE 1900 01
  • 托管 C++ 中的泛型泛型

    我想创建一个List of 键值对位于托管 C 项目中 这是我正在使用的语法 List
  • AutoMapper 无法识别特定于配置文件的前缀

    我正在尝试使用 AutoMapper 从属性名称之前有前缀的类中获取数据 并将其映射到没有这些前缀的第二个类 但是 我不一定希望它always删除该前缀 我只想让它为这个特定的映射执行此操作 我的源类如下所示 public class Ad
  • 如何编辑表以启用级联删除?

    我有一个代表用户的表 当用户被删除时我得到 DELETE 语句与 REFERENCE 约束冲突 显然 CASCADE DELETE在SQL Server中并不像我想象的那么容易 需要将选项添加到表中 问题是 我不知道如何添加CASCADE
  • 如何从表中选择层次结构中的最低级别

    我有一个具有父 子关系的表 Table A Column Id int Column Parent Id int Column Description text 一组示例数据如下 999 NULL Corp 998 999 Div1 997
  • MySQL 中如何使用继承?

    所以我正在读一本关于数据库设计原理的书 并读到了有关继承的章节 但我对如何在 MySQL 中将子类与其超类 连接 感到困惑 The table structure would for example look like this 那么我如何
  • 正确的“多态”方式来存储枚举,有时还存储一些数据

    我正在开发一个程序 我为其存储了一个std vector点 我还加载了std unordered map对其中一些点进行 约束 然后将其应用于点数组 目前 约束的形式如下 Type Value Constant 1 0 Lerp n a L
  • .net 垃圾收集器何时运行?

    当我调试 net 代码时 如何知道垃圾收集器何时运行 我不想控制垃圾收集器何时运行 我只希望能够知道它何时运行 我有一些代码资源不足 我知道资源没有被使用 我想知道 GC 何时运行以释放它们 哦 我想到的资源是来自 Sql 连接池的连接 而
  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 回发或回调参数无效。使用“”启用事件验证

    当我从客户端回发页面时 出现以下错误 我有修改客户端 asp ListBox 的 JavaScript 代码 我们该如何解决这个问题 错误详细信息如下 Server Error in XXX Application Invalid post
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt

随机推荐

  • 什么是初始化块?

    我们可以将代码放入构造函数 方法或初始化块中 初始化块有什么用 是不是每个java程序都必须有它 首先 有两种类型初始化块 实例初始化块 and 静态初始化块 此代码应该说明它们的用法以及它们的执行顺序 public class Test
  • 为 Windows(64 位)编译 SQLite

    我有 MinGW 我想编译SQLite 合并源到 64 位 dll 中 我对这种编译相当陌生 到目前为止我的努力都以失败告终 我首先开始使用 autoconf 合并 并在 Linux 上使用配置和制作工具 但显然这永远不适用于 Window
  • GCC中无法除法的原因是什么

    我的情况很奇怪 每次我尝试编译我的arm项目 LPC2378 codesourcery arm none eabi gcc 4 5 1 时 我在链接时都会遇到相同的错误 media data Projects arm uart main c
  • Jenkins/Hudson SVN 问题

    我的 Jenkins 安装有一个 奇怪的 问题 这基本上导致 SVN 更新在备用基础上失败 堆栈跟踪显示两个问题 hudson util IOException2 revision check failed on my repo and C
  • std::vector::reserve 性能损失

    inline void add const DataStruct rhs using namespace boost assign vec reserve vec size 3 vec rhs a rhs b rhs c 上面的函数执行了大
  • 使用 sqlAlchemy 的存储过程

    如何使用 sqlAlchemy 调用 sql server 的存储过程 发动机和连接有一个execute 方法可以用于任意 sql 语句 会话也是如此 例如 results sess execute myproc param1 param2
  • WPF 数据网格:使用 ItemsSource 时操作无效。

    请参阅下面的 XAML 基本上我正在尝试创建一个分层数据网格
  • Cocoa API 文档下载

    是否可以下载所有 Cocoa API 文档 我必须很多次离线工作 有时一个疑虑会阻碍我所有的工作 Xcode 会自动为您执行此操作 除非您已禁用它 Your Documentation prefs pane should look some
  • Actionbar 顶部的 DrawerLayout

    使用抽屉布局时 有没有办法将抽屉视图覆盖在操作栏上 我不想在显示抽屉时隐藏操作栏 我希望操作栏保持原状 但被发送到后台 iOS Play 音乐应用就是一个例子 我当前的实现是在抽屉状态更改时隐藏和显示操作栏 但我不喜欢这种用户体验 publ
  • Criteria API:按类类型过滤

    我对关系数据库相对陌生 并且在创建查询方面遇到一些问题 首先我想简单地解释一下情况 我有几个实体类 全部都延伸了AbstractEntity or EntityProperty 因此实体可以拥有属性 属性也可以拥有实体 因此存在双向关系 现
  • jQuery UI 对话框阻止 Google Chrome 中的窗口滚动条 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我在使用 jQuery UI 对话框时遇到问题 当我在 jQuery 对话框中打开照片时
  • 英特尔 Edison MRAA 模块不工作

    我最近下载了 Intel XDK IOT 版本并使用了 LED 引脚 13 闪烁示例 然后我将程序上传到爱迪生上 但它出现了一些错误 其中之一是找不到 MRAA 模块 附带的示例代码是 main js var mraa new requir
  • Clojure,合并两个地图数组

    我有两个地图数组 1st is a 1 b 2 d 6 a 2 b 2 a 7 b 7 2nd is a 3 c 3 e 9 y 7 a 2 b 6 c 8 取决于的值a即 如果它在第二个数组中匹配 则 第二个地图 应与 第一个地图 合并
  • 如果测试没有足够的 python 覆盖率,如何让 travis 失败

    如果我的测试没有足够的覆盖率 例如 通常我使用以下 travis 配置条目运行测试 script coverage run source mytestmodule setup py test 根据这个link 如果您添加 fail unde
  • iOS 12 上的 PWA 不再与 Safari 共享 Service Worker 缓存?

    对于 iOS 11 上的 PWA 我们通过将登录详细信息存储在 Service Worker Web 缓存中来解决在 Safari 中打开的外部第三方登录问题 这在 iOS 12 中不再有效 在撰写本文时处于测试版 我认为这肯定是因为 PW
  • 使用 JavaScript eval 解析 JSON

    问题 我正在使用 eval 解析来自我的 WebMethod 之一的 JSON 返回值 我不想添加jquery json 因为传输量已经相当大了 所以我用eval解析JSON返回值 现在有传言说这是不安全的 为什么 没有人可以修改 JSOn
  • ld:找不到 -lrt 的库

    我正在尝试运行一个为 Ubuntu 创建且适用于 Mac OS 的项目 当我执行 make 时 出现以下错误 ld library not found for lrt clang error linker command failed wi
  • 我可以在项目/解决方案级别设置 Option Explicit 和 Option Strict 吗?

    我真的很喜欢 VB NET 提供的编码速度 但我不喜欢忘记声明变量类型 函数返回类型等的可能性 这就是我在每个类中使用的原因 Option Explicit On Option Strict On 有没有办法在项目 解决方案级别定义这两个选
  • gridview 将 dropdownlist 绑定到 List>

    我的数据库中有许多表保存对键值对的引用 电话号码类型 1 Home 2 Work 3 移动 4 Fax etc 所以我有一个类型表 当它们在其他表中使用时 它们引用 int 值作为外键 当我把它们拉出来时 我一直将它们存储为keyvalue
  • 如何有效地对数据库中的继承进行建模?

    在数据库中建模继承的最佳实践是什么 有什么权衡 例如可查询性 我对 SQL Server 和 NET 最感兴趣 但我也想了解其他平台如何解决这个问题 有多种方法可以对数据库中的继承进行建模 您选择哪个取决于您的需求 以下是一些选项 每类型表