”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 外键可以引用多态关联中的多个表吗?

外键可以引用多态关联中的多个表吗?

发布于2024-11-16
浏览:836

Can a Foreign Key Reference Multiple Tables in Polymorphic Associations?

多态外键:一个外键可以引用多个表吗?

关系数据库中外键的概念通常涉及指定确切的目标参考列应指向的表。然而,在处理多态关联时,其中一个表与一组中的多个其他表有关系,就会出现问题:是否可以有一个可以引用这些表中任何一个表的外键?

答案:否

在MySQL和PostgreSQL中,外键约束只能引用单个父表。此约束通过在父表中保持引用行和被引用行之间的明确关系来确保数据完整性。

多态关联的替代方案

因为外键不能直接指向多个表,需要替代解决方案来建模多态关联:

  • Joined继承: 创建一个表,其中包含子表中的所有列和一个鉴别器列,以标识每行属于哪个表。
  • 每个类层次结构的表: 创建单独的表
  • 联合类型: 利用单个列来容纳来自的数据值不同的域,允许它引用多个子表。

其他资源

有关多态关联及其解决方案的进一步见解,请参阅以下资源:

  • SQL 中实用的面向对象模型
  • SQL 反模式,第 1 卷:避免数据库编程的陷阱
版本声明 本文转载于:1729692085如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么我的 PyQt4 按钮点击信号在循环内总是输出相同的值?
    为什么我的 PyQt4 按钮点击信号在循环内总是输出相同的值?
    在循环中连接 PyQt4 中的槽和信号在 PyQt4 中,在槽和信号之间建立连接是事件处理的基本方面。但是,当尝试连接循环内按钮发出的多个信号时,可能会出现意外行为。为了说明此问题,请考虑以下代码:def __init__(self): for i in range(0, 10): ...
    编程 发布于2024-11-16
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-16
  • 如何在整个 MySQL 数据库中执行全局查找和替换?
    如何在整个 MySQL 数据库中执行全局查找和替换?
    查找和替换整个 MySQL 数据库目标是在整个 MySQL 数据库中执行全局查找和替换操作。该问题建议更改以下语法:update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_r...
    编程 发布于2024-11-16
  • 如何在 C++ 中将字符串转换为双精度数:使用 `std::istringstream` 和 `std::stod` 的简单指南
    如何在 C++ 中将字符串转换为双精度数:使用 `std::istringstream` 和 `std::stod` 的简单指南
    在 C 中将字符串转换为双精度型 在 C 中,可以使用 std::istringstream 和 std::stod 函数将字符串转换为双精度型。#include <sstream> double string_to_double(const std::string& s) { ...
    编程 发布于2024-11-16
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1和$array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求是构...
    编程 发布于2024-11-16
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-16
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-16
  • 为什么 Lambda 比 C++ 中的普通函数更可优化?
    为什么 Lambda 比 C++ 中的普通函数更可优化?
    与普通函数相比,为什么 Lambda 允许增强编译器优化Nicolai Josuttis 的 C 标准库(第二版)断言 lambda 可以与普通函数相比,编译器可以更有效地优化。这一优势源于 lambda 作为函数对象的本质。当 lambda 传递给函数模板时,它会被实例化为专门针对该对象定制的新函...
    编程 发布于2024-11-16
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-16
  • 如何有效地从 JavaScript 中的对象数组中删除属性?
    如何有效地从 JavaScript 中的对象数组中删除属性?
    从对象数组中高效删除属性处理包含多个对象的数组时,需要从每个对象中删除特定属性。虽然使用 for 循环的简单方法就足够了,但探索利用 ES6 功能和原型操作的替代方法可以带来更高效的实现。ES6 对象解构One这种技术就是 ES6 中引入的对象解构。它可以从对象中提取特定属性并进一步分配给新变量。在...
    编程 发布于2024-11-16
  • Nonce 如何保护 Web 请求免受重放攻击?
    Nonce 如何保护 Web 请求免受重放攻击?
    如何使用 Nonces 保护 Web 请求问题用户找到了一种利用网站评分系统的请求验证系统的方法:复制高价值的 HTTP 请求。这会损害系统的完整性和可靠性。解决方案:实现 Nonce 系统Nonce(使用一次的数字)是通过确保特定请求不被执行来防止请求重放攻击的值。之前做的。这是实现随机数系统的常...
    编程 发布于2024-11-16
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-16
  • 如何有效控制JVM内存消耗?
    如何有效控制JVM内存消耗?
    控制 JVM 内存消耗为了分配适当的资源以获得最佳应用程序性能,设置 JVM 的最大内存至关重要JVM(Java虚拟机)可以利用。这不仅包括堆内存,还包括正在运行的进程的整个内存消耗。为了实现这一点,JVM 提供了两个关键的命令行参数:- Xms:: 此参数指定启动时分配给 JVM 的最小内存量。-...
    编程 发布于2024-11-16
  • 互动角斗士战斗模拟|角斗士之战.com
    互动角斗士战斗模拟|角斗士之战.com
    通过这个交互式角斗士战斗模拟进入竞技场!控制两个强大的角斗士,每个角斗士都有独特的动作,如攻击、防御和闪避,并配有动态动画和实时战斗日志。这款模拟由 GladiatorsBattle.com 提供支持,非常适合古罗马和战术游戏的粉丝。加入战斗,体验斗兽场的快感! ...
    编程 发布于2024-11-16
  • 如何正确设置Java URLConnection中的User-Agent?
    如何正确设置Java URLConnection中的User-Agent?
    设置 Java URLConnection 的用户代理尝试使用 Java 和 URLConnection 解析网页并将用户代理设置为指定的值时,可以在末尾附加一个额外的“Java/1.5.0_19”。这是由于旧版本 Java 的限制所致。解决方案(Java 1.6.30 及更高版本)在 Java 1...
    编程 发布于2024-11-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3