一个表列可用于多个 fk 表?

2024-04-23

对于这种情况,最好的解决方案/做法是什么? 我有一个表,可以引用多个表(对象)?

以下是 UserCalendar 表的示例。这是一个用户保存事件的表,但系统也从后面插入到该表中。用户执行一些有截止日期的服务,这些服务也被插入到该表中。问题是没有 UserEvent 表这样的表。用户应将其所有事件保存在此日历中作为描述。我应该让这件事尽可能简单。

我可以用两种方式设计。

1)

用户日历
用户日历 ID |用户 ID |描述 |对象类型 |对象ID

使用这个选项我就不必 FK 这个表了。我只能更改 ObjectType(通知、服务、日历)并使用该表的 id 作为 ObjectId。如果是事件,则不会有这样的表,并且该字段将为空字段。 我们称此为伪 FK 列。

2) 或者我可以按照理论上的说法为每个 FK 使用多个表。

用户日历
用户日历 ID |用户 ID |描述

用户事件
用户日历 ID |事件 ID

用户服务
用户日历 ID|服务 ID

用户通知
UserCalendarId |NotificationId
...

对于每个系统事件或属于特定类型的任何其他自定义事件,该外部关系表可以是 n 个数字

第一个解决方案是快速实施。


我更喜欢第三种解决方案作为两种设计的混合:

用户日历
用户日历 ID |用户 ID |描述

用户日历属性
用户日历 ID |对象类型 |对象ID

这样,您就可以根据需要向日历条目添加任意数量的附加引用(例如事件and通知)并且您之间没有紧密耦合用户日历表和任何其他表。

它还取决于您访问附加数据(事件、服务等)的频率(如果将 FK 放在您的主目录中有意义)用户日历 table.

我建议去灵活性多于表现,尽管你会稍微增加复杂你的架构。功能需求发生变化的可能性比您遇到性能问题的可能性更大。

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

一个表列可用于多个 fk 表? 的相关文章

  • PHP 错误:php_network_getaddresses:getaddrinfo 失败:(从其他站点获取信息时。)

    尝试从外部源获取信息时 我收到以下错误 Warning php network getaddresses getaddrinfo 失败 第 行名称解析暂时失败 昨天一切都很好 那么这个脚本发生了什么 它不起作用并给我上面的错误 有什么解决方
  • Powershell“Set-PSDebug -Trace 2”导致意外结果

    我遇到一个奇怪的问题 在设置 Set PSDebug Trace 2 时出现不同的行为 我追踪到 switch 语句未正确执行 并且能够在 Powershell V3 上重现它 但不能在 Powershell V2 或 Powershell
  • 在所有布局方法之后调用哪个 Activity 方法?

    我需要做一些事情Activity调用所有布局方法后 所有Views 已就位并且Activity已准备好显示 哪种方法可以做到这一点 如果你想获得视图的宽度或其他东西 这应该有效 将其添加到您的 Activity 的 onCreate 中 V
  • .NET Web API - 添加日志记录

    我正在寻找有关处理 API 日志记录的最佳方法的帮助 我想将所有请求和响应记录到 sql 或文本文件 如果这是最好的方法 目前我已经在 SQL Server 的日志表中插入一行 我使用名为 LogAction 的静态方法来执行此操作 并在
  • 无法比较类型“ndarray(dtype=int64)”和“str”

    Example of data that I want to replace 数据具有以下属性 购买 V 高 高 中 低 维持 V 高 高 中 低 门 2 3 4 5 更多 2 4人以上 lug boot 小 中 大 安全性低 中高 这就是
  • F# 中类型约束的顺序

    这适用于 F 4 0 type Something lt a b when b gt seq lt b gt gt 这不会 type Something lt b when b gt seq lt b gt a gt 类型名称中出现意外的符
  • 将项目添加到自定义组件的布局

    我有一个习惯Footer Component我想在 QML 应用程序的不同位置重用它 Rectangle color gold height 50 anchors bottom parent bottom left parent left
  • for循环内递归函数的时间复杂度

    如果我们有一个函数 int x 0 int fun int n if n 0 return 1 for int i 0 i
  • 在 C# 中调用并排显示窗口

    愚蠢的问题是否有一种简单的方法可以清除桌面 然后打开两个资源管理器窗口并调用 并排显示窗口 任务栏调用 只是想知道 MS 库中是否有 api 可以做到这一点 您可以使用TileWindowsWinAPI 函数通过 p invoke 将所需窗
  • 如何将谓词作为参数传递#

    如何将谓词传递到方法中 但在没有传递谓词的情况下仍使其工作 我想也许是这样的 但似乎并不正确 private bool NoFilter return true private List
  • 如果存在 sqlite 则重命名列?

    我创建了一个最初未使用的列 但现在我们正在设置和获取值 我发现列名不正确 以及我想要更改列名称但想要保留设备中现有数据库的数据 有任何疑问吗检查并重命名sqlite 列 像这样的东西 Alter Table MyTable RENAME C
  • 在oracle sql中创建日期差异的自定义函数,排除周末和节假日

    我需要计算两个日期之间的天数decimal 不包括周末和节假日 by 使用自定义函数在 Oracle SQL 中 网站上也有类似的问题 然而 正如我所看到的 它们都没有要求使用自定义函数将输出作为十进制 我需要小数的原因是为了之后能够使用
  • 如何在位置中使用 Nginx Regexp

    Web 项目将静态内容放入 some content img 文件夹中 url规则为 img some md5 但文件夹中的位置 content img 前两位数字 Example url example com img fe5afe048
  • Rails——自我与@

    我正在关注 Michael Hartl 的 RoR 教程 它涵盖了密码加密的基础知识 这是当前的用户模型 class User lt ActiveRecord Base attr accessor password attr accessi
  • 实现用户定义的算术函数

    如何添加函数 例如汉明权重 并在右侧出现的表达式中使用它是一些 is 2 goal 像 goal expansion 或 term expansion 这样的东西可以帮助这里吗 我承认这不是一个大功能 但它可以提高我的一些 Prolog 程
  • MySQL GROUP 通过还是使用 PHP?

    我有一个看起来很简单的问题 但我只是想问你如何解决它 在 MySQL 表中有以下结构 provider artist a 1 a 2 a 3 b 4 现在需要在 HTML 中回显一个列表 例如 provider a 1 2 3 provid
  • Python 调度一个作业,每个工作日开始,每小时运行一次

    我目前有一个示例代码定义为 import schedule import time def job t print I m working t return schedule every day at 01 00 do job It is
  • MonoDevelop - 代码窗口颜色方案

    MonoDevelop 中有没有办法自定义代码窗口配色方案 我想要类似的东西黑曜石之子 http studiostyl es schemes son of obsidian如果可能的话 是的 转到 MonoDevelop 语法突出显示选项面
  • 继承模板的排序顺序

    使用 Sitecore 6 6 我们正在构建一些继承许多基本模板的模板 这对于重用和标准化我们的代码非常有用 因为所有字段都存储在常量文件中以便于引用 然而 我们似乎无法定义这些继承模板的显示顺序 无论如何 模板似乎都遵循它们添加的原始顺序
  • Dingo API 删除“数据”信封

    有没有一种简单的方法可以从 Dingo API 响应中删除 数据 信封 当我使用这个 Transformer 来转换用户模型时 class UserTransformer extends EloquentModelTransformer L

随机推荐

  • underscore.js: _.throttle(函数, 等待)

    根据下划线文档 http underscorejs org throttle throttle 函数 等待 创建并返回一个新的 所传递函数的节流版本 在调用时 重复 实际上最多只会调用原始函数一次 每等待毫秒 对于速率限制事件很有用 发生的
  • 使用列表中的项目更改嵌套字典的字典中的值?

    如何根据列表的值修改 创建嵌套字典的字典中的键 值 其中列表的最后一项是字典的值 其余项冷藏到字典中的键 这将是列表 list adddress key1 key1 2 key1 2 1 value 这只会在解析命令行参数等情况下出现问题
  • 加载 DOM 后如何运行 jQuery 的后备副本?

    以下是a中的第一行代码
  • Struts2 瓷砖 org.apache.tiles.extras.complete.CompleteAutoloadTilesListener 集成错误

    我正在关注这里发布的答案 使用 struts2 tiles plugin 在图块定义中使用 OGNL 和通配符 https stackoverflow com questions 10050433 ognl and wildcards wo
  • 文本段的名称从何而来?

    传统的汇编器和更高级别的编译器使用多个内存segments 根据预期用途 因此 有数据段 堆栈段 bss 和文本段 文本段也称为代码段 Text部分 为了机器码 我问过所有我能找到的老前辈 像机器代码这样难以阅读的东西是如何被称为 文本段
  • Javascript:setTimeout() - 需要帮助

    我目前正在网页上执行突出显示功能 并为此使用 jquery 插件 我的代码如下所示 var input function var matchword searchbox val if matchword body removeHighlig
  • 当同时按下两个按钮时

    我有一个小问题 我有一个表单 这是我的登录表单 然后我还有另一个表单 这是我的添加用户表单 当我单击登录表单的登录按钮时 它需要检查是否同时按住了 Shift 和 Control 键 如果两者均未按下 则不应打开添加用户表单 但如果它们都被
  • C++ UDP Socket端口复用

    如何在 C 中创建客户端 UDP 套接字 以便它可以侦听另一个应用程序正在侦听的端口 换句话说 如何在 C 中应用端口复用 我只想监听一个端口 您可以使用嗅探器来做到这一点 只需忽略来自不同端口的数据包即可 我可能需要阻止它发送一些特定的数
  • Powershell:如何将字节字符串与二进制注册表值进行比较

    我有一个二进制注册表值 我想检查它在 Powershell 脚本中的一致性 我通过以下方式检索值 Get ItemProperty Path HKLM Software ORL WinVNC3 Name ACL ACL 这将返回一个字节字符
  • 使用 AngularJS 将选择重置为默认值

    我有一个关于 AngularJS 的问题 我有一个 使用 ngOptions 创建的选项进行选择 我想要 将所选选项设置回默认选项 我尝试过了 删除模型变量 例如 if angular isDefined scope first delet
  • 如何在视图中加载部分视图?

    我对这种片面的观点感到非常困惑 我想在我的主视图中加载部分视图 这是一个简单的例子 我正在加载 Homecontroller Index 操作的 Index cshtml 作为主页 在index cshtml中 我通过创建一个链接 Html
  • 如何更改 Composer 中一个包的最低稳定性 [重复]

    这个问题在这里已经有答案了 我正在尝试合并LDAP 验证 https github com ccovey ldap auth通过 Composer 模块到我的 Laravel 项目中 然而 它仅适用于dev稳定版本 我当前的 Compose
  • 如何使用 AngularJS 显示和隐藏 div?不使用任何 css 或 jquery

    我想使用 angularJS 隐藏 div 并在单击按钮时显示它 我使用了 ng show 和 ng hide 但它不起作用 div div
  • 可点击的精灵标签?

    我一直在玩精灵文本标签 更具体地说是这个例子 http stemkoski github io Three js Sprite Text Labels html http stemkoski github io Three js Sprit
  • Flask Python 未加载 main.css

    文件结构如下 app py 和 app2 py 几乎相同 只是 app2 py 指向 templates 文件夹 因为 app2 py 位于 src 文件夹中 app py app2 py 通过 app py 加载时 一切运行正常并且找到了
  • ReferenceError:CKEDITOR 未定义

    我正在尝试使用CK编辑器 http ckeditor com 但是当我尝试时出现以下错误 在 JS 控制台中 例子 http docs ckeditor com guide dev framed从教程中 浏览器中仅显示一个文本框 Refer
  • 独立Python3脚本之间的进程间通信

    我们可以使用标准的 multiprocessing Queue 类在独立的 Python3 脚本之间进行通信吗 bash aaa py bash bbb py 如果没有 是否有另一个库 例如标准多处理模块 用于与独立脚本进行通信 看一下有关
  • Webpack 中的 /node_modules/watchpack 中出现“无法解析模块 'aws-sdk'、'child_process'、'net'”

    我正在尝试构建我的 prod webpack 文件并收到 5 10 个 无法解析模块 aws sdk child process 的错误 所有这些错误都以相同的路径开始 ERROR in webpack watchpack chokidar
  • 如何在对象字段值发生变化时定义断点?

    作为示例 给出下面的代码摘录 我想定义一个断点 每当对象字段值发生变化时就会触发断点 并且可以选择根据条件中断 False or True在这种情况下 type TForm1 class TForm EnableButton TButton
  • 一个表列可用于多个 fk 表?

    对于这种情况 最好的解决方案 做法是什么 我有一个表 可以引用多个表 对象 以下是 UserCalendar 表的示例 这是一个用户保存事件的表 但系统也从后面插入到该表中 用户执行一些有截止日期的服务 这些服务也被插入到该表中 问题是没有