使用 char 作为主键/外键是否不行?

2023-11-24

考虑有一堆链接到“国家”或“货币”表的表。

为了使数据更易于阅读,我想在这两个表中的每个表中使用国家代码(例如美国、GB、AU)和货币代码(美元、澳元)创建 CHAR 字段作为主键,并且所有其他表将使用此 CHAR 作为外键。

数据库是带有innodb引擎的mysql。

它会导致性能问题吗?这是我应该避免的事情吗?


性能并不是真正的主要问题,至少对我来说不是。问题更多的是关于代理与自然键。

国家/地区代码不是静态的。他们可以而且确实会改变。国家更名(例如埃塞俄比亚改为厄立特里亚)。它们产生了(例如南斯拉夫或苏联的解体),也消失了(例如西德和东德)。当这种情况发生时,ISO 标准代码就会发生变化。

More in 1990 年以来的名称变更:国家、城市等

代理键往往更好,因为当这些事件发生时,键不会改变,只有引用表中的列会改变。

出于这个原因,我更倾向于使用 int 主键创建国家和货币表。

话虽这么说,varchar 键字段将使用更多空间并具有某些性能缺点,除非您执行大量查询,否则这些缺点可能不会成为问题。

为了完整起见,您可能需要参考应用程序开发人员犯的数据库开发错误.

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

使用 char 作为主键/外键是否不行? 的相关文章

  • pyspark.sql.functions.window 函数的“startTime”参数和 window.start 有何作用?

    示例如下 df spark createDataFrame 1 2017 05 15 23 12 26 2 5 1 2017 05 09 15 26 58 3 5 1 2017 05 18 15 26 58 3 6 2 2017 05 15
  • 从 Presto 中的 JSON 列获取特定值

    我有一个带有 JSON 列的表points其中一行为 0 0 2 1 1 2 2 0 5 15 1 2 20 0 7 我想获取键的值 1 and 20 并将它们存储为别名 例如first and second在查询中 到目前为止我所做的是
  • 在内连接中重用 mysql 子查询

    我正在尝试优化查询 试图避免重复用 指示的查询 复杂查询 使用两次 结果相同 原始查询 SELECT news FROM news INNER JOIN SELECT myposter FROM SELECT COMPLEX QUERY U
  • PostgreSQL 窗口函数:row_number() over(按 col2 分区 col 顺序)

    以下结果集源自具有一些连接和联合的 SQL 查询 SQL 查询已经对 Date 和 game 上的行进行了分组 我需要一列来描述按日期列分区的游戏的尝试次数 Username Game ID Date johndoe1 Game 1 100
  • 在 Python 中,如果我有 unix 时间戳,如何将其插入 MySQL 日期时间字段?

    我正在使用 Python MySQLDB 我想将其插入 Mysql 中的 DATETIME 字段 我该如何使用cursor execute 来做到这一点 要将 UNIX 时间戳转换为 Python 日期时间对象 请使用datetime fr
  • 获取从开始日期到结束日期的活跃周数

    我的订阅数据如下所示 数据显示用户何时购买订阅 它有user id subscription id start date and end date 我已经得出wk start and wk end从中 user subscription i
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • 如何在“order by”中添加条件?

    我有一个带有输入参数的存储过程 现在根据这个参数 我的 order by 语句将发生变化 如果输入参数是 ID int类型列 则按ID排序 如果是 ProductType 则按产品类型排序 如果是 IssueDate 则应按问题日期排序 现
  • 在 Oracle 中使用数据透视表的建议

    我需要一份报告 我应该使用数据透视表 报告将按类别分组 使用 case when 语句不好 因为有很多类别 您可以将 Northwind 数据库视为示例 所有类别将显示为列和报告将显示客户在类别中的偏好 我不知道另一个解决方案 并在互联网上
  • 蟒蛇 | MySQL | AttributeError:模块“mysql.connector”没有属性“connect”

    我正在学习 python 中的一个新库 mysql 我尝试执行以下命令 import mysql connector mydb mysql connector connect host localhost user root passwd
  • 如何删除MySQL中的所有事件

    如果我想删除某个事件 我需要查询类似的内容 DROP EVENT IF EXISTS eventname 但我找不到一次性删除所有事件的命令 必须一项一项地删除 有没有一次性删除所有事件的SQL DROP EVENT IF EXISTS S
  • 如何修复“未知变量'sql-mode = ANSI'”?

    使用 MySQL 5 5 27 在 my cnf 中我有 mysql sql mode ANSI 启动 mysql 控制台后我得到 unknown variable sql mode TRADITIONAL MySQL 文档服务器 SQL
  • Apache 子进程已退出,状态为 255

    经过大量的搜索 尝试 修复 等待和哭泣 在我放弃之前 我想为这个错误抓住最后的机会 我们正在奔跑Microsoft Windows Server 2012 Apache 2 4 6 Win64 OpenSSL 1 0 1e PHP 5 5
  • 具有“日期之间”的 CakePHP 模型

    我有一个很大的数据集 超过十亿行 数据在数据库中按日期分区 因此 我的查询工具必须在每个查询上指定一个 SQL Between 子句 否则它将必须扫描每个分区 而且 它会在返回之前超时 所以 我的问题是 分区的数据库中的字段是日期 使用 C
  • 无法加载身份验证插件“caching_sha2_password”

    我正在将 MySQL 8 0 与 MySQL Workbench 连接并收到以下错误 无法加载身份验证插件 caching sha2 password dlopen usr local mysql lib plugin caching sh
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • parent_id 是外键(自引用)并且为 null?

    浏览 Bill Karwin 的书 SQL Antipatterns 第 3 章 Naive Trees 邻接表 父子关系 有一个注释表的示例 CREATE TABLE Comments comment id SERIAL PRIMARY
  • 如何关闭整个数据库的区分大小写

    我创建了一个包含许多脚本和许多存储过程的数据库 在这个数据库中 我们没有注意担心区分大小写 因为它对于我的本地开发计算机来说是关闭的 综上所述 我试图弄清楚如何使以下两条语句返回相同的结果 SELECT FROM companies SEL

随机推荐

  • CoreBluetooth反复断开连接

    我已经上下查找过这个问题 但似乎没有人遇到这个问题 我有两台 iPad 其中一个充当始终位于前台的蓝牙外设 由于我对中央侧更感兴趣 因此我将中央 iPad 背景设置为支持 BLE central 我的工作流程如下 中央应用程序运行并开始扫描
  • 具有 Parquet 和分区的 Spark DataFrames

    我无法找到有关此主题的太多信息 但假设我们使用数据帧读取 10 个块的 parquet 文件 spark 自然会创建 10 个分区 但是 当数据帧读入文件来处理它时 它不会处理很大的数据与分区比率 因为如果它处理未压缩的文件 块大小会更大
  • 使用 NWConnection 进行长时间运行的 TCP 套接字的正确方法

    我整天都在与 NWConnection 作斗争 以在长时间运行的 TCP 套接字上接收数据 由于缺乏文档 我在给自己造成以下错误后终于让它工作了 数据不完整 由于只调用一次receive 获取 TCP 数据无序 由于从计时器 轮询 接收 导
  • 自定义对话框片段

    我正在尝试创建一个类似于DatePickerDialog The Dialog我正在创建的应该为用户提供一系列图像供他们选择 我相信我已经成功创建了数组并向其中添加了正确的图像 我现在遇到的问题是如何获取Dialog现身 我应该返回什么 我
  • 了解 AVPlayer 对象何时准备好播放

    我正在尝试玩一个MP3传递给的文件UIView从以前的UIView 存储在NSURL fileURL多变的 我正在初始化一个AVPlayer with player AVPlayer playerWithURL fileURL NSLog
  • Angular 等待多个 http 请求完成,然后触发最后一个请求

    我有 4 个 http 请求 第三个接收查找值 而第四个接收实际表单数据 他们是这样的 let medicalData this data getCodes medical subscribe data gt console log med
  • 如何使用react-native将文件上传到服务器

    我正在开发一个应用程序 我需要将图像上传到服务器 根据图像 我得到了需要渲染的响应 你能帮我看看如何使用react native上传图片吗 React Native 内置了文件上传功能 Example来自 React Native 代码 v
  • GetCommandLine linux *true* 等效项

    与 Linux 等效的类似问题 GetCommandLine 和 CommandLineToArgv 是否有可能获得rawLinux 下的命令行 文件 proc self cmdline 被破坏 a out files file 1 fil
  • 为什么布尔变量的默认值往往为 false? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 据我所知 C VB Jav
  • 如何将 $_SESSION 变量传递到 websocket 服务器?

    我在网上搜索了很多 但没有找到有用的线索 我有一个 websocket 服务器和一个 Web 服务器在我的本地计算机上一起运行 当客户端使用浏览器 API new WebSocket ws localhost 连接到 WebSocket 服
  • 临时文件未找到文件异常

    我正在构建 java 应用程序 Spring JSF PrimeFaces 我将文件上传到服务器 但是 如果我在文件上传结束后立即单击 下一步 按钮 则会收到此错误 Aug 24 2013 8 12 34 PM org apache cat
  • PHP mkdir() 权限

    我有一个 Linux 服务器 使用 apache 作为 Web 服务器 在我的 PHP 脚本中 我正在创建目录0777模式 代码非常简单 如下所示 mkdir path 0777 当我运行此脚本并转到我的服务器文件管理器时 该文件夹就在那里
  • PHP 简单 HTML DOM 解析器在有效 url 上返回 false

    我正在尝试以下操作 url https www tripadvisor es Hotels g187514 Madrid Hotels html ta html file get html url var dump ta html 它返回
  • Dialog 或 DialogFragment 中的 Activity 是否有等效的dispatchTouchEvent()

    我需要拦截应用程序中的所有触摸事件以监视自定义活动超时 目前我使用dispatchTouchEvent 在我的活动中 但如果屏幕上有对话框 则不会调用此函数 有谁知道是否有任何方法可以在存在对话框的情况下拥有相同的功能 Thanks For
  • Javascript - 在新选项卡中打开链接(同一窗口)

    我意识到这个主题已经有几个问题了 但它们似乎都很老了 只是想为此获得最新的答案 打开新选项卡 在同一浏览器窗口内 的标准方式仍然是 window open url blank window focus 另外 我读到它取决于浏览器的用户配置
  • 将 2 个元素数组的 JavaScript 数组转换为对象键值对

    从这样的事情中获得最快的算法是什么 var array 1 a 2 b 3 c 像这样的事情 Object 1 a 2 b 3 c 到目前为止 这就是我想出的 function objectify array var object arra
  • 计算元音

    谁能告诉我这个脚本有什么问题吗 我是一个 python 新手 但我似乎无法弄清楚是什么导致它无法运行 def find vowels sentence gt gt gt find vowels test 1 count 0 vowels a
  • Matlab中有高斯差分函数吗?

    我是图像处理新手 在我的实验中 我在高斯差分方面遇到困难 给了我各种实现 但我不理解它们及其参数 这是我的公式 我应该自己实现这个过滤 还是有为此定义的现有函数 当然 所有参数都类似于链接中的参数 我需要调整参数并生成不同的图像 您可以使用
  • 如何访问 Angular2 中的 HTML 视频元素

    我有一个 HTML5
  • 使用 char 作为主键/外键是否不行?

    考虑有一堆链接到 国家 或 货币 表的表 为了使数据更易于阅读 我想在这两个表中的每个表中使用国家代码 例如美国 GB AU 和货币代码 美元 澳元 创建 CHAR 字段作为主键 并且所有其他表将使用此 CHAR 作为外键 数据库是带有in