关系数据库学的最重要的一个理论是:不要给关键字赋予任何业余意义。假如关键字具有了业务意义,当用户决定业务含义,也许他们想要为关键字增加几位数字或者把数字改为字母,那么就必须修改相关的关键字。一个表中的主关键字有可能被其他表做为外键。就算是一个简单的改变,也可能会造成极大的维护上的开销。

为了使表的主键不具有任何业务意义,一种解决办法是使用代理主键,例如为表定义一个不具有任何业务含义的ID字段(也可以叫其他名字),专门做为表的主键。

我回顾我以前设计的很多数据库,都在某些地方没有考虑周到,即使大部分的主键都没有业务意义,还是会有某些表的主键和业务联系起来。因为我一直认为,主键是用来保持唯一性的,之所以要有代理主键,是因为有一些记录的内容没办法保持唯一性。例如设计一个用户表,用户的名字有可能重复,这个人可能叫blue,那么人也可能叫blue。这样就需要一个ID来分清。

由于我之前的想法,导致我数据库设计上的一些错误。例如我曾经在一次数据库设计中使用一个ID来做为一个表的主键,该表是记录一些报表的。每个报表上都有一个ID,这个ID是具有业务意义的,是可以让客户输入,也可以自动生成的,但是客户说明这个ID是唯一的,是数字类型。因此由于它的唯一性,我在数据库中设计这个ID为数字类型的。但是到了后来客户要求使用文字类型的,例如原来的是“111111”,他要求可以写成“11111A”,“11111B"。这个时候由于这个ID做了很多表的外键,就会产生很多维护上面的麻烦。即使在数据库表之间做了级联更新和级联删除,修改数据类型还是很麻烦的事情。

这次RFID项目数据库设计我原来想使用RFID标签的ID做为产品的主键,因为RFID标签ID具有唯一性,使用它作为主键在查找的时候速度应该会快些。但是后来发现问题并不是这么简单。如果使用RFID标签ID做为主键,那么就具有了业务意义。当产品表和其他表关联,产品表的主键做为其他表的外键的时候,如果出现一些业务上的情况,例如RFID标签坏了,要更换,就会产生更改主键内容的问题了。

回顾一下,还是发现自己的基础不扎实。学习数据库的时候都不去上课。少年不努力,老大徒悲伤。

mysql主键能否有实际意义_数据库主键不应该具有任何业务意义相关推荐

  1. mysql主键自增为什么在插入的时候还要自己写主键值_数据库主键自增插入显示值...

    SQL Server 2008 数据库主键自增插入显示值 前几天在工作的时候遇到在删除数据库中表的数据的时候,删除之后,重新添加的数据没有得到原来的数据的id值(表中id为主键,且设置为自增) ,使用 ...

  2. mysql主键无意义_数据库主键不应该具有任何业务意义

    关系数据库学的最重要的一个理论是:不要给关键字赋予任何业余意义.假如关键字具有了业务意义,当用户决定业务含义,也许他们想要为关键字增加几位数字或者把数字改为字母,那么就必须修改相关的关键字.一个表中的 ...

  3. mysql中主键外键的作用_数据库主键和外键的作用以及索引的作用,它的优缺点是什么?...

    定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄. 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证 ...

  4. 使用UUID作为数据库主键产生的问题及解决方案

    序言 看了b站IT老齐的架构三百讲的其中一个短视频,有所体会并记录一下.视频中所讲的财经部门使用的UUID主键,在日终结算时出现磁盘的IO异常,导致应用出现高延迟.最后发现是UUID的问题,UUID作 ...

  5. mysql主键标识_实体标识与数据库主键

    今天,我们将讨论DDD意义上的标识与数据库主键之间的区别. 我们经常将两者混合在一起,但它们真的是一回事吗? 实体标识 在DDD的背景下,标识是实体固有的东西. 只有实体拥有它; 它是用于区别于所有其 ...

  6. mysql数据库主键如何设计

    聊一个实际问题,淘宝的数据库的主键是如何设计的呢? 某些错误的离谱的答案还在网上流传着.其中一个明显的错误就是关于mysql的主键设计. 大部分人的回答如此自信就是:用8个自己的bigint做主键,而 ...

  7. MySql数据库主键外键与数据库设计

    MySql数据库主键外键与数据库设计 首先要指出的: 列.字段.属性是一个概念 行.记录.元组是一个概念 MySQL数据库CONSTRAINT约束:非空约束,唯一约束,主键约束,外键约束 show c ...

  8. mysql设置约束l命令_MYSQLl数据库主键设置长度控制_MySQL

    bitsCN.com MYSQLl数据库主键设置长度控制 1.出现的问题? JEECMS套件(jeecms-2012-sp1)中有一个jeecms-db-2012-sp1.sql文件,文件里面有一张& ...

  9. 数据库主键的设计和思考

    1. 何谓数据库主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束 ...

最新文章

  1. Open3d 学习计划—13(Azure Kinect)
  2. 使用FPM快速生成RPM包
  3. 【Manning新书】可解释人工智能: 构建可解释机器学习系统
  4. P2051 中国象棋
  5. hdu 1166 敌兵布阵 (线段树)
  6. 事务传播特性和隔离级别
  7. Django项目--登录判断装饰器
  8. JDK源码解析之 java.lang.ThreadLocal
  9. 线程销毁_多线程(2)-Java高级知识(9)
  10. Vue.js 牛刀小试(持续更新~~~)
  11. SparkStreaming之updateStateByKey
  12. Python爬虫(一)抓取指定的页面
  13. Windows server 2003 ××× 配置实例(Site to Site)
  14. 购买大米云主机并配置php环境搭建企业网站
  15. 企业OA办公系统选型技巧实用指南
  16. 编曲软件FL Studio 20.99中文版2023最新免费下载
  17. 治军首在选将,余承东挂帅华为云
  18. c语言中shift的作用,Shift是什么意思?Shift键的功能及作用有哪些?
  19. 关于NCT75DMR2G的使用总结(温度传感器)
  20. 雷达 -- 频谱历史介绍

热门文章

  1. java中mkdirs_java – 多线程环境中的mkdirs()函数
  2. 常用的SQL函数介绍
  3. 宽带连接在win10更新后1068报错处理办法
  4. LFI漏洞利用总结(文件包含)
  5. cuSPARSE库官方文档部分翻译
  6. 白话文带你了解 封装 继承 多态
  7. 2020年嵌入式第十一届省赛真题解析
  8. voyage-linux系统,evoyage
  9. php 32位 下载地址,php 32位官方下载
  10. 计算机主机接通显示器位置发,电脑主机接双显示器怎么设置