为什么在数据库设计中使用一对一关系?

2023-11-22

我很难弄清楚何时在数据库设计中使用一对一关系或者是否有必要。

如果您只能选择查询中所需的列,是否有必要将表分解为一对一的关系。我想更新一个大表比更新一个小表对性能有更大的影响,我确信这取决于表用于某些操作(读/写)的程度

那么,在设计数据库模式时,如何考虑一对一关系呢?您使用什么标准来确定是否需要它,以及不使用它有什么好处?


从逻辑角度来看,1:1 关系应始终合并到单个表中。

另一方面,可能有physical对于此类的考虑“垂直分区”或“行分割”,特别是如果您知道您将比其他列更频繁地访问某些列或以不同的模式访问某些列,例如:

  • 你可能想要cluster or 分割1:1 关系的两个“端点”表不同。
  • 如果您的 DBMS 允许,您可能希望将它们放在不同的物理磁盘上(例如,对性能更关键的放在 SSD 上,另一个放在便宜的 HDD 上)。
  • 您已经测量了对缓存的影响,并且希望确保“热”列保留在缓存中,而“冷”列不会“污染”它。
  • 您需要比整行“更窄”的并发行为(例如锁定)。这是高度特定于 DBMS 的。
  • 您需要对不同的列使用不同的安全性,但您的 DBMS 不支持列级权限。
  • 触发器通常是特定于表的。虽然理论上您可以只有一个表并让触发器忽略该行的“错误的一半”,但某些数据库可能会对触发器可以执行的操作和不能执行的操作施加额外的限制。例如,Oracle 不允许您从行级触发器修改所谓的“变异”表 - 通过使用单独的表,只有其中一个可能会变异,因此您仍然可以从触发器修改另一个表(但有其他方法来解决这个问题)。

数据库非常擅长操作数据,所以我不会仅仅为了更新性能而拆分表,unless您已经对代表性数据量执行了实际基准测试,并得出结论,性能差异确实存在并且足够显着(例如,抵消了对 JOINing 增加的需求)。


另一方面,如果您谈论的是“1:0 或 1”(而不是真正的 1:1),那么这完全是一个不同的问题,值得不同的答案......

也可以看看:我什么时候应该使用一对一关系?

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

为什么在数据库设计中使用一对一关系? 的相关文章

  • 在 SQL 数据库中存储自定义字段的首选方式是什么?

    我的朋友正在开发一款供不同独立医疗单位使用的产品 该数据库存储了在不同时间进行的大量测量数据 例如体温 血压等 让我们假设它们保存在一个名为的表中exams有柱子temperature pressure等 以及id patient id a
  • 聚集索引对数据库性能的影响

    我最近参与了一个新的软件项目 该项目使用 SQL Server 2000 进行数据存储 在审查该项目时 我发现其中一个主表在其主键上使用聚集索引 该索引由四列组成 Sequence numeric 18 0 Date datetime Cl
  • 不同的数据库使用不同的名称引用吗?

    例如 mysql引用表名使用 SELECT FROM table name 注意 其他数据库是否使用不同的字符来引用其表名 这种引号的使用称为分隔标识符 它是 SQL 的重要组成部分 因为否则您将无法使用以下标识符 例如表名和列名 包含空格
  • 我应该对表进行分区/子分区吗?

    Case 系统有dispositives 基本上由id type name 我可能有N个dispositives 我有一张桌子来存放log of all dispositives 这是系统中最大的表 现在统计100英里记录 The log表
  • php 中每个数据库扩展的字符串如何转义?

    在任何人对这个问题的性质做出结论之前 我已经知道了参数化 准备好的语句 http en wikipedia org wiki Prepared statements Parameterized statements并尽可能使用它们 不幸的是
  • 半透明数据库

    我正在构建一个包含健康信息的应用程序 这个面向消费者的应用程序对我来说是新的 我想要一种方法来完全消除隐私问题 当我回顾保护可公开访问的数据库中的敏感数据的方法时 我经常遇到数据库半透明的概念 有原书 http www wayner org
  • 在数据库中有效存储商品位置(用于订购)

    设想 有一个用户拥有的电影数据库 电影显示在一个名为 我的电影 的页面上 电影可以按照用户想要的顺序显示 例如 位置 1 为 搏击俱乐部 位置 3 为 Drive 依此类推 显而易见的解决方案是存储每个项目的位置 例如 电影 ID 用户 I
  • 保存用户的身高和体重

    我应该如何将用户的身高和体重存储在MySQL数据库中 以便我可以使用这些信息来查找特定身高或体重内的用户 另外 我需要能够以英制或公制显示此信息 我的想法是存储以厘米为单位的身高和以公斤为单位的体重信息 我更喜欢公制而不是英制 我什至可以让
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • 如何查看我的 laravel 数据库?

    我已经设置了功能性的 laravel 项目 数据库连接有效 我已经通过终端添加了一些表 但现在我想看到它 就像您可以使用 phpmyadmin 看到所有内容一样 默认情况下如何找到数据库文件以及如何打开它 在终端中 cd 进入项目目录 va
  • 有谁知道有一个很好的库可以将一个人的名字映射到他或她的性别吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找一个图书馆或数据库 可以根据一个人的名字或昵称猜测他或她是男性还是女性 就像是 john gt M mary gt F al
  • Mysql如何将数据库中的时间数据类型设置为仅HH:MM

    如何将我的 mysql 数据库字段 时间 数据类型设置为数据库中的 HH MM 在我的脚本中 用户仅输入 HH MM 并且数据库自动添加最后一个 SS 数字 问题是当我拉取时要编辑的值 它还添加了最后一个数字 这有点烦人 我可以用 PHP
  • wikidata 获取带有项目标签和值的所有属性

    我的问题是如何从 wikidata 最好是通过 SPARQL 提取在网页上呈现的所有属性及其各自的标签 以Google https www wikidata org wiki Q95维基数据上的条目 对于属性 P414 证券交易所 或 P1
  • SQLite适合并发读吗?

    在没有锁定的情况下 SQLite 数据库的性能是否能达到每秒 50 次读取左右 我正在尝试确定它是否可以在不会经常 写入 的 PHP 网站上使用 它主要是从一小部分表中读取相同的数据 没问题 并发读 写实际上会被 SQLite 序列化 所以
  • 时态数据库设计,有一些变化(实时行与草稿行)

    我正在考虑实现对象版本控制 同时需要同时拥有活动对象和草稿对象 并且可以利用某人在这方面的经验的见解 因为我开始怀疑是否有可能在没有潜在可怕的黑客攻击的情况下实现这一点 为了示例 我将把它分解为带有标签的帖子 但我的用例更一般 涉及缓慢改变
  • 用于监视文件夹和更新数据库的 Python 守护进程

    这专门用于管理 MP3 文件 但它应该可以轻松地适用于任何包含大量文件的目录结构 我想找到或编写一个守护程序 最好用Python 来监视一个包含许多子文件夹的文件夹 这些子文件夹都应该包含X个MP3文件 每当添加 更新或删除文件时 它都应该
  • 如何在数据库中存储世界各地的所有地理位置?

    我在一家旅游网站工作 我需要存储游客去过的旅游景点 我需要位置表中的地点是唯一的 以便我可以知道特定地点的受欢迎程度等 我还需要存储在我身边的所有国家 州 城市 因为我不能依赖用户输入 数据库是MySQL 看到这些位置的可用数据集 我发现存
  • 从 MySql 迁移到 Sql Server 2008

    我有大约 200 GB 的 Mysql 转储文件 现在我需要迁移到 Sql server 2008 那么我应该遵循什么方法 我应该继续逐行 sql 语句还是有任何适合我的要求的 GUI 工具 微软 SQL Server 迁移 Assista
  • 有人知道一个像样的免费数据库模式逆向工程工具吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 寻找一种工具 可以自动从实时数据库创建 MySQL 数据库模式的图形表示 显示表 列和关系 ER 图 理想情况下 在 OS X 上运行的东
  • 当 Firebase 数据库中的值发生更改时创建推送通知

    我想在 firebase 数据库中的值发生更改时向用户发送推送通知 这是我的数据库 Battles 00000111 062B3333 4046 4FB4 AA37 C2B05853E497 BattleProgress Player1 l

随机推荐

  • 强制 JSON.stringify() 发出 NaN / Infinity 或这样做的 JS JSON 库

    我正在研究向使用 JSONRPC 进行客户端 服务器交互的现有科学应用程序添加 NaN Infinity 支持的可行性 许多 JSON 库确实处理 在某些情况下可选 NaN 和 Infs 例如 Python json读取和写入 Java J
  • Java 使用实例方法而不是类/静态方法为每个实例化对象创建唯一 ID

    对此相当陌生 所以我希望标题中的术语正确 我想弄清楚如何创建一个实例方法这将执行以下操作 返回一个ID号 由于每个对象都是从类构造函数创建的 实例化 因此会为其分配一个唯一的整数 ID 号 第一个 ID 号是 1 当实例化新对象时 将分配连
  • MediaPlayer setDataSource 需要最佳实践建议

    看完之后 媒体播放 and 媒体播放器 android 文档我仍然很困惑 需要有经验的建议设置数据源重载方法 我在用MediaPlayer in a Service我的项目中的组件将是前台服务播放音乐时 我的音乐文件 mp3 位于res r
  • Eureka 服务给出请求执行错误?

    请求执行错误 端点 DefaultEndpoint serviceUrl http localhost 8761 eureka 当我在 docker windows 中运行时 它会给出 但是当我在 STS 中的 spring boot 应用
  • 如何识别脚本中是否使用了bash或dash?

    我正在编写一个 bash 脚本 在 Ubuntu 中使用 sh 命令时它会抛出错误 它似乎与 dash 不兼容 我正在学习这个主题 所以我想检测是否使用 dash 而不是 bash 来抛出错误 如何在脚本上下文中检测它 有可能吗 You c
  • 从 Eclipse 导入到 Android Studio 后无法运行任务 ':app:dexDebug" 执行失败

    有一个在 Eclipse 4 4 2 ADT 中运行的 Android 项目 在 Linux Ubuntu 14 10 上运行 我已经导入到 Android Studio 1 1 0 并设法摆脱了最初的编译错误 我想要做的下一件事是在我的手
  • Pandoc:带有 YAML 元数据的模板

    我使用 pandoc 生成带有 YAML 元数据的 index html 我知道从 pandoc 模板迭代关联数组 YAML Author Mastropiero Author Gunter Fraggen TEMPLATE for aut
  • 使用组件进行 Angular 2 表单级别验证

    在 Angular 2 中 如何在自定义组件中添加输入控件 并将其绑定到父组件中的表单控件容器 为简洁起见 简化了以下代码 例如 我有一个表单组件 请注意按钮禁用绑定 Component selector my form template
  • 如何在python中将数据模拟为request.Response类型

    我想写一些测试用例来练习对象检查在 isinstance obj requests Response 逻辑中 在我创建模拟数据作为 requests post 的返回值之后 模拟数据的类型始终是模拟类 这样 我如何重写模拟数据 使模拟数据可
  • 德米特混乱法则

    我希望有人能帮我解释一下德墨忒耳定律 如果我有一个类 我假设它是一个聚合根 并且其中有一个子类的集合 通过聚合根访问这些子类来更新它们的属性是否非法 e g public class Company company has a number
  • 将 text/xml 读入 ASP.MVC 控制器

    如何将文本 xml 读入 ASP MVC 控制器上的操作 我有一个 Web 应用程序 它可能会从两个不同的源接收 POSTed Xml 因此 Xml 的内容可能会有所不同 我希望控制器上的默认操作能够读取 Xml 但是我很难了解如何首先将
  • VC++ 2010 中“仅可移动类型”的问题

    我最近安装了 Visual Studio 2010 Professional RC 来尝试一下并测试 VC 2010 中实现的一些 C 0x 功能 我实例化了一个std vector of std unique ptr 没有任何问题 但是
  • javascript:函数调用自身

    我想下面的代码 jQuery mybutton click function do something 我怎么能回忆起这个 匿名 函数 我无法为此函数命名 var xfun function do something jQuery mybu
  • Delphi SOAP 数组问题

    我有一个用 delphi 创建的 SOAP 应用程序 输入到达服务器正确 但输出始终为空 r创建了对象 响应 但是length r notes 始终为 0 如果我在没有数组的情况下执行应用程序 它也可以正常工作 哪里有问题 三天的谷歌搜索和
  • 使用Jquery从Json对象获取父节点

    我试图通过子节点获取 json 对象中的父节点 我从客户端获得的 json 是一个多级目录层次结构 层次结构就像 Root Folder 1 folder1 a folder1 b folder 2 folder 3 folder3 a 我
  • PHP-通过 URL 获取文件类型

    我想使用 PHP 通过 URL 获取文件类型 例如 image gif 我尝试过 上面的代码给了我一个空白页 下面的代码返回 3 我哪里错了 已解决 使用 Fileinfo 获取内容类型
  • SQL Server - Guid VS。长的

    到目前为止 我一直在使用 C Guid Guid NewGuid 方法生成一个唯一的 ID 该 ID 可以使用 Linq to SQL 作为 ID 字段存储在我的一些 SQL Server 数据库表中 我被告知 出于索引原因 使用 GUID
  • 在SQLite UPDATE中模拟ORDER BY来处理唯一性约束

    我在 SQLite 3 中有一个表 sqlite gt schema CREATE TABLE table1 id INTEGER PRIMARY KEY NOT NULL title TEXT UNIQUE NOT NULL priori
  • 解决ReferenceError:Next.js中未定义localStorage [重复]

    这个问题在这里已经有答案了 我构建了一个 React 现在我尝试从 React Router dom 迁移到 Next js 我进行了重大更改并重构了代码 pages routes 和 store js 但后来我收到此错误 Referenc
  • 为什么在数据库设计中使用一对一关系?

    我很难弄清楚何时在数据库设计中使用一对一关系或者是否有必要 如果您只能选择查询中所需的列 是否有必要将表分解为一对一的关系 我想更新一个大表比更新一个小表对性能有更大的影响 我确信这取决于表用于某些操作 读 写 的程度 那么 在设计数据库模