码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据库设计中如何选择主键 (自然键或代理键 )| Part 1


    自然键与代理键

    身为数据库设计人员,你将面临的首要决定是你的表应使用哪种主键(PK)。如果你询问任何每天处理数据库的人,无论是数据库管理员、开发人员还是测试人员,你都会得到无数的意见和理由。使解决问题的障碍更加复杂的是,没有一种万能的解决方案。有鉴于此,本系列将介绍支持和反对不同类型 PK 的一些原因。在所有这些原因的某处,将会引导你找出 PK 的最佳类型,以满足你的组织需求。在第一部分中,我们将比较两种基本类型的 PK:自然键和代理键。稍后,我们将讨论是否使用数据库自动递增功能,以及哪些数据类型(如果有)是最好的 PK。

    自然键

    自然键是由表中已存在的一个或多个列组成的(例如,它们是数据模型中实体的属性),用于唯一标识表中的一条记录。由于这些列是实体的属性,因此它们本质上具有业务意义。以下是 Navicat Premium 16 的表设计器中有自然键的表示例。我们可以通过 “键”列中的钥匙图标轻松找到主键:

    查看一下数据,我们可以知道 productCode 是有业务义意的:

    代理键

    代理键(或合成键、伪键、实体标识符、非事实型键、技术键等!)是由系统生成的(GUID、序列、唯一标识符等)值,没有业务意义,用于唯一标识表中的记录。键本身也可以由一列或多列(即复合键)组成。 我们可以看到在同一个数据库的表中有一个代理键,定义了一个customerNumber 列作为表的 PK:

    虽然该列不是自动递增,但它是一个与客户实体无关的数字字段:

    作出决定

    那么,为什么一个表使用自然键,而另一个表使用代理键呢?

    产品有一个唯一的库存编号是很常见的,这是一个理想的PK。而添加一个额外的数字键只会浪费磁盘空间,并且几乎肯定需要在 productCode 列上添加一个用于搜索的额外索引。但另一方面,客户通常不会有一个唯一标识符。若你必须在数据库中辨识特定客户,可能需要一个长得惊人的列列表。因此,分配一个数字代理键来索引表中每一列通常要容易得多。

    自然键与代理键的总结

    在 “选择主键”的第一部分中,我们探讨了自然主键和代理主键,并考虑了什么因素决定选择哪一种。决定一开始使用自然键还是代理键是很重要的,因为你选择哪种主键也将有助于解答一些后续问题,特别是使用代理键。如果你想试用 Navicat 16,你可以在这里下载 14 天试用版。

    往期回顾

    Navicat 被投毒了 | 真相来了!

    盗版引发设备瘫痪

    Navicat 16.1 为OceanBase 社区版

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

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

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

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

  • 相关阅读:
    C语言-整数和浮点数在内存中的存储-详解-上
    独立后台的查题功能题库系统
    python详解(4)——异常、类、作用域and自定义模块
    代码随想录算法训练营第23天|669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
    RK3588 实现温控风扇之通过extcon子系统上报状态(三)
    基于Python的决策树判断是否降雪
    Qt OpenGL相机系统
    emment语法
    【系统稳定性 - 调优】3.4 常见Binder相关异常调优总结
    解读商业智能BI,数据仓库中的元数据
  • 原文地址:https://blog.csdn.net/weixin_53935287/article/details/126760521
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号