具有 40+ 列的 mysql 表

2023-12-10

我的表格中有 40 多列,我必须添加更多字段,例如当前城市、家乡、学校、工作、大学、大学……

将为许多匹配的用户提取这些用户数据,这些用户是共同的朋友(与其他用户朋友一起加入朋友表以查看共同的朋友)并且未被阻止并且还不是该用户的朋友。

上面的请求有点复杂,所以我认为最好将额外的数据放在同一个用户表中以快速访问,而不是向表中添加更多联接,这会进一步减慢查询速度。但我想听听你对此的建议

我的朋友告诉我添加额外的字段,这些字段不会作为序列化数据在一个字段上进行搜索。



实体关系图图:

  • 我当前的表:https://i.stack.imgur.com/KMwxb.png
  • 如果我加入更多表:https://i.stack.imgur.com/xhAxE.png



一些建议

  1. 这个表和列没有任何问题
  2. 遵循这种方法MySQL:优化具有大量列的表- 将额外字段序列化为一个不可搜索的字段
  3. 创建另一个表并将大部分数据放在那里。 (如果我已经有 3 个或更多表要加入来提取用户的记录(例如朋友、用户、检查共同的朋友),那么连接会变得更加困难

像往常一样 - 这取决于。

首先,有一个MySQL 可支持的最大列数,而你并不是真的想到达那里。

其次,如果您有很多带有索引的列,则插入或更新时会对性能产生影响(尽管我不确定这在现代硬件上是否重要)。

第三,大表通常是所有看似与核心实体相关的数据的垃圾场;这很快就会使设计变得不清楚。例如,您呈现的设计显示了 3 个不同的“状态”类型字段(status、is_admin 和 fb_account_verified) - 我怀疑应该有一些业务逻辑将它们链接在一起(例如,管理员必须是经过验证的用户),但是您的设计不支持这一点。

这可能是问题,也可能不是问题——它更多的是一个概念、架构/设计问题,而不是性能/是否有效。但是,在这种情况下,您可以考虑创建表来反映有关帐户的相关信息,即使它没有x对多关系。因此,您可以创建“user_profile”、“user_credentials”、“user_fb”、“user_activity”,所有这些都由 user_id 链接。 这使得它更加整洁,如果您必须添加更多与 facebook 相关的字段,它们不会悬在表格的末尾。但它不会使您的数据库更快或更可扩展。连接的成本可能可以忽略不计。

无论您做什么,选项 2(将“很少使用的字段”序列化为单个文本字段)都是一个糟糕的主意。您无法验证数据(因此日期可能无效,数字可能是文本,非空值可能会丢失),并且“where”子句中的任何使用都会变得非常慢。

流行的替代方案是“实体/属性/值”或“键/值”存储。此解决方案有一些好处 - 即使您的架构发生更改或在设计时未知,您也可以将数据存储在关系数据库中。然而,它们也有缺点:很难在数据库级别验证数据(数据类型和可为空性),很难使用外键关系与其他表建立有意义的链接,并且查询数据可能变得非常复杂 - 想象一下查找所有记录状态为 1、facebook_id 为空且注册日期大于昨天的记录。

鉴于您似乎知道数据的架构,我认为“键/值”不是一个好的选择。

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

具有 40+ 列的 mysql 表 的相关文章

  • 将IP保存到数据库中

    当用户登录时 我想将他们的 IP 保存在数据库中 我该怎么做呢 MySQL 字段最适合使用哪种类型 获取IP的PHP代码是什么样的 我正在考虑将其用作登录 会话内容的额外安全功能 我正在考虑使用用户现在拥有的 IP 检查用户从数据库登录的
  • MySql 视图脚本中的注释

    可以这样做吗 我尝试过多个 gui mysql workbench navicat toad for mysql 但没有一个保存这样的注释 something important select something else importan
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • 如何从表中检索特定列 --- JPA 或 CrudRepository?我只想从用户表中检索电子邮件列

    用户模型 Entity Table name user uniqueConstraints UniqueConstraint columnNames email public class User implements Serializab
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • 为什么将模块级代码放入函数中然后调用该函数在Python中速度更快?

    在亚历克斯 马尔泰利的回应中使 Python 脚本面向对象 https stackoverflow com questions 1813117 making a python script object oriented 他提到在 Pyth
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 无法连接到 MAMP 上的 phpMyAdmin

    我收到此错误消息 MySQL 说道 无法连接 设置无效 phpMyAdmin 尝试连接 MySQL 服务器 但服务器拒绝连接 您应该检查配置中的主机 用户名和密码 并确保它们与 MySQL 服务器管理员提供的信息相对应 用户和通行证是默认的
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in
  • MySQL中查找id最大的行

    看一下下面名为 Articles 的 MySQL 表 id articleId version title content 1 1 0 0 ArticleNo 1 title v0 0 ArticleNo 1 content v0 0 2
  • 防止 Propel 插入空字符串

    当未设置列时 如何防止 Propel ORM 插入空字符串 CREATE TABLE user uid INTEGER PRIMARY KEY AUTO INCREMENT email VARCHAR 255 NOT NULL UNIQUE
  • 使用什么框架来引导我的第一个生产 scala 项目?

    我正在第一次涉足 scala 的生产应用程序 该应用程序当前打包为 war 文件 我的计划是创建 scala 编译工件的 jar 文件 并将其添加到 war 文件的 lib 文件夹中 我的增强功能是通过 Jersey 公开的 mysql 支
  • MySQL NOT IN 来自同一个表中的另一列

    我想运行 mysql 查询来选择表中的所有行films其中的值title该列不存在于另一列的所有值中的任何位置 collection 这是我的表格的简化版本 其中包含内容 mysql gt select from films id titl
  • SKIP加锁和nowait的区别

    pl sql 中 SKIP 锁定游标和 nowait 游标之间的区别 我认为我找到的这张图片是描述差异的最佳例子 详细说明 http viralpatel net blogs oracle skip locked
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表
  • 如何使用 SQL 查询创建逗号分隔的列表?

    我有 3 个表 名为 应用程序 ID 名称 资源 id 名称 应用程序资源 id app id resource id 我想在 GUI 上显示所有资源名称的表格 在每一行的一个单元格中 我想列出该资源的所有应用程序 以逗号分隔 所以问题是
  • 替换字符串中的多个字符,而不使用任何嵌套替换函数

    我的表中存储了一个方程 我一次获取一个方程 并希望将所有运算符替换为任何其他字符 输入字符串 N 100 6858 6858 N 100 0 2 N 35 运算符或模式 替换字符 输出字符串 N 100 6858 6858 N 100 0

随机推荐

  • 子故障错误的微妙之处

    我有 ant 代码 可以在所有子目录中启动发布版本
  • 在声明式 SQLAlchemy 中创建容器关系

    我的 Python SQLAlchemy 应用程序管理一组节点 所有节点均派生自基类Node 我正在使用 SQLAlchemy 的多态性功能来管理 SQLite3 表中的节点 这是基数的定义Node class class Node db
  • SQL Server 2008 报告服务身份验证

  • 如何在 Django 中加入惰性翻译?

    我需要使用惰性翻译 但也需要进行翻译 如何处理 这段代码正在做我需要的事情 print ugettext lazy Hello world 现在我想将两个惰性翻译连接在一起并单独翻译 我现在这不起作用 为什么但想要有两个翻译字符串 prin
  • 为什么C在调用汇编函数时不将指针压入堆栈?

    我目前正在尝试获得一些从 C 调用汇编函数的经验 因此 我创建了一个小程序来计算所有数组元素的总和 C 代码如下所示 include
  • 返回 WPF 上的上一个窗口

    我是 WPF 新手 找不到此问题的答案 我有 3 个窗口 我想在它们之间导航 MainWindow gt Window1 gt Window2 On cancel按钮单击 Window2 我想返回到 Window1 我发现这段代码可以在 2
  • Angular2 加载时文件请求过多

    我正在制作一个网站Angular2我遇到了我认为的问题 在我的角度页面第一次加载时 SystemJS正在发出超过 50000 个请求来检索每个Angular2文件输入angular2 src目录 总共 第一次加载下载超过 4MB 启动时间超
  • FastAPI:如何仅为特定端点启用 CORS?

    下面的示例将为应用程序中的所有端点启用 CORS 如何仅启用 CORSspecific使用 FastAPI 的端点 还是只是单个端点 from fastapi import FastAPI Request from fastapi midd
  • heroku 在 Windows 上拉取 postgresql

    我正在尝试使用以下命令将 heroku 数据库拉到我的本地 Windows 计算机上 heroku pg pull HEROKU POSTGRESQL DATABASE mydatabase app myapp 但是 当我运行此命令时 出现
  • 如何在 Java 中发出原始 HTTP 请求?

    我想使用这些令牌发出基本的 HTTP 请求 http www w3 org Protocols rfc2616 rfc2616 sec5 html 我知道 Java 通常会为您执行此操作 但我想专门设置某些标记 为什么要重新发明轮子 Apa
  • Cocos2D-x 3.0 中图元和精灵的 Z 索引不一致?

    我有两层 每个图层都有一个使用 OpenGL 进行的原始绘图 如下所示 void Layer1 drawPolygon glLineWidth 1 DrawPrimitives setDrawColor4B 255 255 255 255
  • Angular 视频加载事件

    我仍在尝试理解角度 基本上 我有一个 html5 视频 我想听onloadeddata event http www w3schools com jsref event onloadeddata asp 这就是我所拥有的 html
  • 非常非常大数的对数

    我必须找到非常大的数字的日志 我用 C 做这个 我已经做了一个乘法 加法 减法 除法的函数 但是对数有问题 我不需要代码 我需要一个简单的idea如何使用这些函数来做到这一点 Thanks 附 抱歉 我忘了告诉你 我必须找到仅二进制对数那个
  • 无法从前端 JavaScript 访问跨域响应标头

    我正在使用构建一个简单的网络应用程序ReactJS and 创建反应应用程序 我在 Heroku 上设置了一个后端 API 我可以在其中进行POST要求 一切正常 除了 当我使用 fetch API 发出 POST 请求时 响应 100 正
  • 使用服务器密钥时,Google Sheets API 返回“调用者没有权限”

    我已在 API Manager 中生成了服务器密钥 并尝试在我的 Mac 上执行以下操作 curl https sheets googleapis com v4 spreadsheets MySheetID ranges A1 B5 key
  • 函数、SQL 连接和全局变量

    通过在两者之间使用 mysql query 和 mysql fetch array 命令调用下面的函数来连接和关闭数据库是否有任何问题
  • 从 C++ DLL 调用 C# 方法/函数(通过“Dllimport”从 C# 加载)

    在一个标题中恢复它有点困难 所以这是我的情况 我正在构建一个加载 C 库的 C 应用程序 我从那个 C DLL 调用函数 但我也希望我的 C DLL 从 C 应用程序调用函数 即导入 运行它 这里有一段代码可以使其更全面 I m impor
  • 分页不适用于 NestedScrollView 中的 RecyclerView

    如何实现分页recyclerview那是在里面NestedScrollView 请按照以下步骤操作 1 设置recycler view的嵌套滚动启用为false recyclerView setNestedScrollingEnabled
  • kie 工作台部署战争不工作(tomcat)

    我已经下载了 kie workbench 并解压kie drools wb distribution wars 6 2 0 Final tomcat7 war 我以前从未使用过 tomcat 但我想使用工作台 但似乎没有一个选项可以让工作台
  • 具有 40+ 列的 mysql 表

    我的表格中有 40 多列 我必须添加更多字段 例如当前城市 家乡 学校 工作 大学 大学 将为许多匹配的用户提取这些用户数据 这些用户是共同的朋友 与其他用户朋友一起加入朋友表以查看共同的朋友 并且未被阻止并且还不是该用户的朋友 上面的请求