我应该创建一个可以为空的外键还是创建一个新表?

2023-11-27

我有一个关于如何设计数据库的小问题。我有一个动物收容所的桌狗,我有一个桌主人。所有现在和曾经在收容所的狗都被安置在餐桌狗中。现在我想在桌狗和桌主人之间建立联系。

问题是,在这个例子中,并不是所有的狗都有主人,并且由于一个主人可以有不止一只狗,所以应该在狗表中放置一个可能的外键(一只狗至少不能有多个主人)不在庇护所的管理范围内)。但如果我这样做,一些狗(收容所里的狗)的外键将为 null。阅读其他一些主题告诉我这是允许的。 (或者我可能读错了一些主题)

然而,另一种可能性是在两个表之间放置一个表 - 例如“dogswithowners” - 如果狗有主人,则将两个表的主键都放在那里。

现在我的问题是(正如您可能已经猜到的)这两种方法中最好的方法是什么?为什么?


唯一符合关系模型原则的解决方案是额外的表。

此外,很难想象如何找到速度如此慢以至于开始查询时性能差异会很明显的硬件。毕竟,它不是一个每秒处理数万笔事务的关键任务应用程序,不是吗?

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

我应该创建一个可以为空的外键还是创建一个新表? 的相关文章

随机推荐

  • 如何使用 postgres_fdw 连接到本地主机?

    我的想法是我有一个名为的本地数据库northwind 与postgres fdw我想连接另一个名为test在本地主机上 远程连接模拟 对于诸如更新数据库中的表之类的情况 在其他数据库中执行某些操作 例如保存到历史记录等 所以我打开 psql
  • Laravel Sanctum 未使用邮递员进行身份验证

    我是按照Laravel官方文档一步一步来的 当我发送请求至 host api login 我可以收到包含令牌的响应 一切都是正确的 但是当我尝试向 host api user 它始终未经验证 我检查了我的代码好几次 我无法修复它 在我的 e
  • snmpget 返回“此代理在此 OID 处没有可用的此类对象”

    我正在尝试按照以下链接配置 SNMP 代理 http www net snmp org tutorial tutorial 5 toolkit mib module 我已将 c 和 h 文件放入 agent mibgroup 文件夹中 co
  • 对于 IE 中的 SVG 元素,outerHtml 返回未定义

    这是我的代码
  • 运行 VS2008 64 位调试构建时出现“应用程序配置不正确”和“并行配置不正确”

    我正在使用 64 位操作系统 Windows 7 Ultimate 机器 VS2008 和 64 位插件进行工作 我已经在 32 位和 64 位 调试和发布配置中成功构建了我的项目 64 位调试未启动 它给出了错误 无法启动程序 xxx 由
  • 尝试在 Linux 上进行紧密睡眠

    我需要调查 测试 Linux 上某些代码在以下条件下的行为close可能会被信号处理程序中断 无论有或没有SA RESTART 最方便的设置是什么close系统调用睡眠一段可测量的时间窗口 在此期间我可以尝试用信号击中进程 一些想法 故意缓
  • Javascript - 计算具有值的数组对象

    我收到一个返回给我的数组 我需要计算其中有值的行 我尝试调用 arr length 但这给了我数组的总长度 var arr id 1 id 2 id 3 id 4 id id id 结果应该是 4 使用过滤器仅捕获具有值的键 并返回结果数组
  • Linux Clock_gettime(CLOCK_MONOTONIC)奇怪的非单调行为

    伙计们 在我的应用程序中我正在使用clock gettime CLOCK MONOTONIC 为了测量帧之间的增量时间 游戏开发中的典型方法 我时不时地面临一种奇怪的行为clock gettime 返回的值有时不是单调的 即前一个时间更大比
  • 如何从崩溃的应用程序中释放大页面

    我有一个使用大页面的应用程序 并且该应用程序由于某些错误而突然崩溃 崩溃后 由于应用程序没有正确释放hugepage 因此sys文件系统中的空闲hugepage数量没有增加 sudo cat sys kernel mm hugepages
  • GROUP BY 不带聚合函数

    我试图理解 GROUP BY Oracle 数据库管理系统新手 没有聚合函数 它是如何运作的 这是我尝试过的 EMP table on which i will run my SQL SELECT ename sal FROM emp GR
  • 如何在PDO中加载sqlite扩展?

    首先我想向大家通报一下有关情况 以免引起误会 通过sqlite扩展 我提到的是Sqlite的扩展如FTS 而不是PHP的sqlite扩展 我一直在我的应用程序中使用 PDO Sqlite 它无法更改 正如我所见here Sqlite 扩展可
  • Antlr4 Javascript 访问者

    我目前正在尝试在 Antlr4 Visitor 的帮助下开发 JavaScript 编译器 我已经用 Java 实现了这一点 但不知道如何在 JavaScript 中实现这一点 也许有人可以回答我几个问题 1 Java中有一个Visitor
  • 如何使用准备好的语句一次在 mysql 数据库中插入多行?

    我正在尝试使用 staticsan 的答案这个问题对于准备好的陈述 让我们看这个例子 stmt mysqli gt prepare INSERT INTO something userid time title VALUES stmt gt
  • 使用 ActiveJob AsyncAdapter 列出排队任务

    有没有办法让我看到队列中剩余多少个作业 甚至可以检查每个作业 经过一番深入研究后源代码这是我发现的 ActiveJob QueueAdapters AsyncAdapter uses a 并发红宝石线程池来调度和执行作业 当您在配置中初始化
  • 如何使用 PHP 动态创建价格范围

    如何从价格数组创建价格范围 假设我有一个保存价格的数组 Array 0 gt 500 1 gt 500 2 gt 520 3 gt 540 4 gt 551 5 gt 599 6 gt 601 7 gt 601 8 gt 650 9 gt
  • 是否可以从非通用应用程序使用 Wi-Fi Direct?

    我一直在尝试编写一个简单的代码基于命令行的应用程序 使用 Visual Studio 2015 和 Windows 10 中的 C 和 NET 启动 Wi Fi Direct 广告商 如下所示Microsoft 的通用示例 而是手动添加对必
  • 卸载 DLL 期间删除静态对象时退出线程会导致死锁吗?

    我的延迟加载 DLL 中有一个 ClassA 实例 全局 静态对象 该对象内部有一个 观察者 线程 需要执行正常关闭 当我调用 FreeLibrary 时 我注意到在删除这个静态对象期间 我的线程请求关闭 但挂在 endthreadex 上
  • 如何在子目录中移动模块?

    我需要写很多trivial模块 我不想隐藏它们之间的主要模块 由于这个原因 我想要一个像这样的目录树 Project module1 module2 directory module3 module4 module5 问题 如果我将模块移动
  • Pydub - 将 split_on_silence 与最小长度/文件大小结合起来

    我有两个脚本 其中一个会分割一定长度的音频 另一个会在每次出现无声段落时分割音频 是否可以在静音时分割音频 但只能在经过一定时间后 我需要在静音状态下分割成不少于 5 分钟的视频块 分割脚本忽略静音 from pydub import Au
  • 我应该创建一个可以为空的外键还是创建一个新表?

    我有一个关于如何设计数据库的小问题 我有一个动物收容所的桌狗 我有一个桌主人 所有现在和曾经在收容所的狗都被安置在餐桌狗中 现在我想在桌狗和桌主人之间建立联系 问题是 在这个例子中 并不是所有的狗都有主人 并且由于一个主人可以有不止一只狗