• 数据库设计中如何选择主键 (字符串或数值数据类型 )| Part 2


    作为主键的字符串与数值数据类型

    欢迎回到围绕关系数据库选择主键主题的系列。在第 1 部分中,我们介绍了自然主键和代理主键,并考虑了什么因素决定选择哪一种。今天的部分将探讨字符串和数值数据类型,看看哪种更适合作为主键。

    关系数据库中的字符串和数值数据类型

    字符串和数值实际上都是包含了几种不同数据类型的总称。对于初学者来说,字符串数据类型是一个通用的 IT 术语,传统上指的是一组字符序列,可以是文字常量,也可以是某种变量。在数据库方面,以 CHAR 类型表示的单个字符也归类为字符串。其他数据库字符串数据类型包括 VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET。而数值数据类型既包括精确数值数据类型,例如 INTEGER、SMALLINT、DECIMAL 和 NUMERIC,也包括近似数值数据类型,例如 FLOAT、REAL 和 DOUBLE PRECISION。

    辩论

    关于哪种数据类型最适合做主键(PK)的建议在互联网上比比皆是。一些网站直接表示数值键几乎总是优于基于字符的键,而同等数量的网站则提倡使用字符串类型。同时,数据库供应商本身也不会建议使用哪种类型。他们只提供关于 PRIMARY KEY 约束的说明。它可唯一标识表中的每条记录并规定:

    • 主键必须是唯一值,不能含有 NULL 值。
    • 一个表只能有一个主键;在表中,主键可以由单个或多个列(字段)组成。
    • 主键值不应随时间而改变。

    就数据库供应商而言,只要你的主键满足上述标准,那么您就可以开始了。但这并不意味着一种类型可能比另一种优越。现在,让我们深入研究这些类型。

    支持数值类型

    当我第一次学习数据库开发时,有人告诉我,数值类型最适合作为主键,因为它们速度更快,又节约内存。我的第一个雇主联邦政府证实了这种观点,他们使用了数值主鍵,即使这意味着添加一个代理键

    有很多知名的参考网站都回应了这种观点。Mysqltutorial.org 在谈到 MySQL 时指出:

    因为 MySQL 处理整数速度更快,所以主键列的数据类型应该是整数,例如 INT、BIGINT。并且你应该确保主键的整数类型的值范围足以存储表可能有的行数。

    MySQL 在处理数字数据方面远非独一无二。关于 Oracle 主键的”另一页指出“主键通常是数字,因为 Oracle 处理数字的速度通常比任何其他数据类型更快。”

    他们甚至说主键中的数据应该是“无意义的”:

    有时,你可能希望对主键使用被认为是唯一的有意义的数据,例如社会安全号码(SSN)、车辆识别号码(VIN)、电子邮件和电话号码。但是,你不知道电子邮件或电话号码何时会更改或被其他人重复使用。在这种情况下,会产生很多数据问题。在数据库世界中,人工键被称为代理键,与自然主键相反。

    下周预告...

    到目前为止,数值主键似乎是最好的主键。但是,我们还没有听取支持字符串一方的意见。也许他们有一些使用字符串代替数值的充分理由。

    往期回顾

    Navicat 被投毒了 | 真相来了!

    盗版引发设备瘫痪

    Navicat 16.1 为OceanBase 社区版

    Navicat 成为信通院数据库创新实验室成员

    Navicat 学术伙伴计划 - 免费教育版申请

    Navicat 技术智库 - 实战演练与各类热门问题解答

    免费试用攻略 | Navciat 16 数据库管理工具

  • 相关阅读:
    ChatGPT的原理与前端领域实践
    ResNet网络学习笔记。
    【网络】对于我前面UDP博客的补充
    关于cocos2d性能优化记录
    [附源码]计算机毕业设计JAVA潮流服饰网店平台
    04)go语言使用优化 启动时不打开CMD控制台,后台运行
    Plotly,一个交互式数据可视化python库
    SpringBoot的事务详解
    西门子S7-1200PLC混合通信编程(ModbusTcp和UDP通信)
    大数据课程L7——网站流量项目的操作步骤
  • 原文地址:https://blog.csdn.net/weixin_53935287/article/details/126775701