合并具有一对一关系的表

2024-06-24

我有 3 个用于会员系统的 MySQL 表。

  • users:成为用户的最低要求,仅与帐户信息相关(电子邮件、密码、is_activated 等)
  • user_profiles:用户提供的个人信息(姓名、地址、电话...)
  • user_member_profiles:管理员严格管理的信息(缴纳的注册费、参加的会议等)

这些可以压缩到一张表中,这样可以减轻我的麻烦并保持代码干净 - 但我觉得最好将它们分开,因为它们的用途略有不同。

选项1:就这样吧,继续做JOIN又乏味UPDATEs (这条数据进入这个表,这条数据进入另一个表,等等)。对我来说更多的工作,但也许这更有意义?

选项2:将所有内容合并到一张表中。

我认为使用一张表会更快,不需要连接表。也许这取决于数据?每个表大约有12-20个字段,因此合并后的表会很大。

每个用户在每个表中拥有不超过 1 个个人资料,但甚至可能根本没有个人资料(或者可能总共只有 1 个)。

添加一点背景信息:这是一个用 PHP 编写的不断发展的 CMS,我需要对每次安装的表进行调整。管理员需要以类似电子表格的方式管理成员,因此我一次最多选择 200 个用户。

从性能、设计或组织的角度来看,正确的方法是什么?


宽表(多列)需要考虑的另一个因素是对 RDBMS 缓存的影响。任何优秀的开发人员都知道,您不会执行“select * from table”,因为它会通过网络从 RDBMS 向客户端传输不必要的数据。但类似的效果也可能发生在磁盘和 RAM 之间,并且还会影响表需要缓存的 RAM 空间量。

大多数 RDBMS 分配给定的内存量来缓存数据,从而减少物理磁盘读取并加快对用户的响应。这是 Oracle 或 SQL Server 中的缓冲区高速缓存

如果您有一个宽表并以“从表中选择 col1、col2、col3”的形式发出查询,RDBMS 会将完整行加载到 RAM 中(不是 col1 到 3)。当它这样做时,旧的缓存数据将会老化。如果您的表很宽并且加载 50 列,那么您当然需要比相同行数 * 窄表更多的 RAM。这会对 RDBMS 性能产生显着影响。

很多宽表,从缓存中老化了其他表,并且可以看到 IO 统计数据彻底达到顶峰,因为常用表从缓存中老化,为宽表腾出空间。

应将此因素添加到标准化数据的其他优点中,并在表设计时予以考虑。实际上,如果您有一个潜在的宽表,其中一些数据将被定期访问,而另一些数据则很少被访问,请考虑具有 1 对 1 关系的多个表。

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

合并具有一对一关系的表 的相关文章

  • 当验证在另一个表上有条件时,数据库中的唯一性验证

    我在这里问了类似的问题当验证有条件时数据库中的唯一性验证 https stackoverflow com questions 24640182 uniqueness validation in database when validatio
  • 优化 SQL Server 中的排名索引

    我们有一个宽表 目前正在尝试优化 该表有 50 列 统计数据 我们最终希望按降序排列 目前有超过 500 万行 我们正在寻找在降低复杂性和提高读取速度方面优化该表的方法 写入速度对我们来说也很重要 但读取更关键 这些统计数据的排名应尽可能接
  • 如何查看我的 laravel 数据库?

    我已经设置了功能性的 laravel 项目 数据库连接有效 我已经通过终端添加了一些表 但现在我想看到它 就像您可以使用 phpmyadmin 看到所有内容一样 默认情况下如何找到数据库文件以及如何打开它 在终端中 cd 进入项目目录 va
  • 如何在 MariaDB 或 MySQL 中创建文本类型的外键?

    我有两张桌子 CREATE TABLE first table my id TEXT 6 NOT NULL content VARCHAR 30 NOT NULL PRIMARY KEY my id 6 Engine InnoDB char
  • MySQL 设置自动增量“Ad Hoc”

    有没有办法以 临时 方式将 mysql 的 auto increment 设置为某个整数 例如 表中已删除 N 个最新行 因此主键 auto increment 与实际行数相差 N 有没有办法将 auto increment 设置为正确的数
  • 可变字段数的数据库结构设计

    对于某种库存系统 用户可以创建一个item type它具有某些属性 现在每种类型的属性数量都是可变的 我应该如何使用 DBStructure 来解决这个问题 只需制作 X 份量propertyX领域 还是有其他方法可以以这种方式实现灵活性
  • 如果 Count(*) 为零,则返回 NULL

    我有以下 mysql 查询 SELECT count student name AS total student school name FROM student LEFT JOIN school info ON school info s
  • 从多个表插入表

    嘿 我有一个连接表 连接两个不相关的表 两个表都有ID的 我需要选择ID从每个表中使用WHERE具有不同的值 例如这就是我的看法 INSERT INTO c aID bID VALUES SELECT a ID WHERE a Name M
  • wikidata 获取带有项目标签和值的所有属性

    我的问题是如何从 wikidata 最好是通过 SPARQL 提取在网页上呈现的所有属性及其各自的标签 以Google https www wikidata org wiki Q95维基数据上的条目 对于属性 P414 证券交易所 或 P1
  • 如何用PHP显示分层的“NESTED SET”数据?

    我试图弄清楚如何使用 php 显示嵌套的 MySQL 数据 我已经设法搁置所有 叶节点 但后来我陷入困境 我需要显示一整棵树及其所有元素的关系 这是表格 category id name lft rgt 1 Saws 1 12 2 Chai
  • 如何使用带有外键的时间尺度超表并保持一对多关系?

    我正在尝试创建一个考虑到最小冗余的数据库 我们想使用 timescaledb 超级表 我运行 postgreSQL v 12 和 timescaledb v 1 7 4 创建表的 postgreSQL 代码如下 您可以在此处查看 dbdia
  • MYSQL 连接结果集在 IN () 期间在 where 子句中擦除结果?

    重磅编辑 最初的问题是基于对 IN 如何处理联接结果集中的列的误解 我认为 IN some join some column 会将结果列视为列表并循环遍历每一行 事实证明它只查看第一行 因此 改编后的问题是 MySQL 中是否有任何东西可以
  • 如何在对应用程序影响最小的情况下从 MySQL“切换”到 Amazon RDS?

    Amazon 官方表示 Amazon RDS 让您能够访问熟悉的 MySQL 数据库的全部功能 这意味着您现在已经在现有 MySQL 数据库中使用的代码 应用程序和工具可以与 Amazon RDS 无缝协作 我不明白这一点 Amazon R
  • XAMPP、PROFTPD问题

    我已经在 macOS Mojave 上安装了 XAMPP 当我运行此命令 sudo Applications XAMPP xamppfiles xampp start 时 我收到以下错误 启动 Mac OS X 7 2 10 0 的 XAM
  • 测试 ODBC 连接的有效方法

    我们的产品是一个 TCP 监听事务处理器 传入连接被分配一个线程来处理连接和一个数据库连接来使用 我们维护一个数据库连接池 而不是为每个传入的客户端连接建立新的数据库连接的昂贵方法 数据库连接池相当可配置 最小 最大大小 增长率等 一些细节
  • Django 1.6:清除一张表中的数据

    我有一个名为 UGC 的表 想要清除该表中的所有数据 我不想重置整个应用程序 这也会删除所有其他模型中的所有数据 是否可以只清除一个模型 我还为我的应用程序配置了 South 如果这有帮助的话 你可以使用原始 SQL https docs
  • Hibernate统计打印HQL:null

    我是使用休眠的新手 我打开了统计信息 与普通的 HQL 查询一起 我得到了许多这样的统计信息 INFO Statistics HQL null time 1724ms rows blah 有人可以以任何方式帮助我为什么null查询大约需要
  • java应用程序,线程在终止MySQL连接后挂起

    我有一些工作线程正在运行 其中包括 MySQL 和 mysql connector java 5 1 20 当我杀死一些 SQL 语句 使用 mysql 客户端的kill 连接id 时 java线程挂起 这应该抛出一些异常 jstack 打
  • ubuntu上rails mysql gem问题

    Ruby on Rails 我想调用本地主机上的控制器 但服务器说 缺少 mysql gem 将其添加到您的 Gemfile 中 gem mysql 2 8 1 问题 当我点击 gem list 命令时 我得到了一个包含 mysql 2 8
  • 用于监视文件夹和更新数据库的 Python 守护进程

    这专门用于管理 MP3 文件 但它应该可以轻松地适用于任何包含大量文件的目录结构 我想找到或编写一个守护程序 最好用Python 来监视一个包含许多子文件夹的文件夹 这些子文件夹都应该包含X个MP3文件 每当添加 更新或删除文件时 它都应该

随机推荐

  • IntersectionObserver.observe不是对象,如何使用IntersectionObserver

    我正在使用 css 位置 粘性创建一个带有粘性列的表格 当列 卡住 时 我想以不同的方式设置它们的样式 我的第一个项目涉及当第二列部分滑过第一列或 wdtscroll td nth child 1 时设计第一列或 wdtscroll td
  • 带有note属性的字符串可以修改吗

    有没有什么方法可以修改字符串而不丢失它所具有的任何注释属性 t something Add Member noteproperty one 1 PassThru t one 1 t else t one
  • 如何将 defaultdict(list) 转换为 Pandas DataFrame

    我有一个具有以下结构的 defaultdict list 对象 id list list 例如 a1 0 01 cat a2 0 09 cat a3 0 5 dog 我想转换这个defaultdict list into a Pandas
  • 在自定义 ListView 中获取 NullPointerException

    当我运行我的应用程序时 我收到这样的错误 02 27 22 59 19 331 E AndroidRuntime 2060 FATAL EXCEPTION main 02 27 22 59 19 331 E AndroidRuntime 2
  • 使用 python 与 Popen 运行 shell 脚本在 python 命令行和实际程序中的行为不同

    我有一个 shell 脚本 我想从 python 程序调用它 但与以下代码根本不起作用 Popen 已导入 bf dir home wireless bf path os path join bf dir airdispatch sh sh
  • 如何隐藏 Neo4j 中节点之间不需要的关系

    我是 Neo4j 的新手 我有一个奇怪的要求 我有一些节点 CREATE a node title 1 CREATE b node title 2 CREATE c node title 3 CREATE d node title 4 以及
  • Selenium IDE 中的条件检查

    我想检查是否使用硒填充了可能的必填字段 我非常愿意使用 IDE 来完成此操作 而不是导出到代码 更具体地说 如果国家 地区下拉列表的值为 英国 我想确保填写邮政编码字段 如果下拉列表设置为其他任何内容 则邮政编码字段可以留空 如果共识是我必
  • 如何根据 Oracle 中的动态列表检查 IN 条件?

    编辑 更改标题以适合下面的代码 我试图从 Oracle 表中检索可接受值的列表 然后对另一个表执行 SELECT 同时将某些字段与所述列表进行比较 我试图用光标来做到这一点 如下所示 但是失败了 DECLARE TYPE gcur IS R
  • gcc可以针对不同CPU进行交叉编译吗?

    安装在 fedora 16 上的 gcc 是否可以针对不同的 CPU 比如 SPARC 进行交叉编译 我已经有了一定的认识 如有错误 还需要专家指正 不同的操作系统的不同之处在于它们用于访问内核的系统调用 或者完全在于它们使用的内核 它是否
  • 使用 argparse 和 python 接受字典作为参数[重复]

    这个问题在这里已经有答案了 我试图用 argparse 接受 type dict 的参数 但无论输入如何 它都会给出无效 dict 值的错误 usr bin env python import argparse MYDICT key val
  • 如何在 Azure 上的 MVC 应用程序中托管和嵌入视频?

    我创建了一个基本应用程序并上传到 Azure 我想嵌入视频 以便用户可以从列表中进行选择并查看每个视频 例如 选择一部电影并观看其预告片 我在 MVC 解决方案中创建了两个文件夹 Posters 包含用作每个视频背景的 jpg 文件 Vid
  • 具有 2 个队列的 Spring AMQP 项目

    我正在开发一个涉及 2 个队列和多个与它们交互的侦听器的项目 流动 新的 HTTP 请求到达服务器 然后将其转换为一个对象 该对象将成为消息 该消息必须在两个队列中发布 我有两种类型的侦听器 它们从每个队列获取消息 然后我做任何我想做的事情
  • 如何防止不同浏览器渲染字体不同?

    我在尝试在所有浏览器中保持一致的字体样式时遇到问题 如下所示 safari的字体渲染系统使字体粗细比chrome的字体粗细小 Safari Chrome 我尝试使用在其他问题上找到的解决方案 尽管他们没有解决这个问题 如何在所有主要浏览器中
  • 获取对组件树上某种类型的所有指令的引用

    我有一个复杂的场景 需要帮助 我有一个指令 称为TagDirective 它被放置在我的应用程序中的多个元素上 我有另一个指令 QueryDirective 需要引用的所有实例TagDirective存在于其宿主元素以及层次结构中其上方的所
  • 适用于 Windows 的 D-Bus 等效项

    有人知道 Windows 的 Linux D Bus 机制吗 Thanks 选择你的毒药 http msdn microsoft com en us library aa365574 28VS 85 29 aspx http msdn mi
  • Selenium IDE - 如何处理 java 脚本警报和确认

    我是自动化测试的新手 并开始使用 Selenium IDE 作为自动化的选择 我只是想知道是否有任何方法可以使用 IDE 处理 java 脚本警报 举一个场景 我单击 删除 按钮 出现一个带有 确定 和 取消 选项的 java 脚本警告框
  • 猜谜游戏 python 二分查找

    我无法弄清楚我的代码有什么问题 我试图让用户想到 1 到 100 之间的数字 然后这个程序就能猜到它 该程序将范围的高数和低数相加 然后除以二 并将其用作猜测值 如果程序猜测的数字大于用户的数字 则用户输入 1 如果小于 则输入 1 如果猜
  • HTTPS:Laravel 使用 .htaccess (public/)

    我试图在我的 Laravel 项目中包含 https 而不使用 godaddy 仅使用htaccess没什么大不了的 因为我正在使用proxypass来自我的 SSL 认证网站 该网站将传递到我的 laravel 项目 我只需要把我的 la
  • maven- assembly-plugin 不添加与系统范围的依赖关系

    这是我的 pom 文件
  • 合并具有一对一关系的表

    我有 3 个用于会员系统的 MySQL 表 users 成为用户的最低要求 仅与帐户信息相关 电子邮件 密码 is activated 等 user profiles 用户提供的个人信息 姓名 地址 电话 user member profi