关于主键的设计、primary key
主键:用于唯一标识一个表中一行数据。
外键:用于建立两个表之间的关系,A表中有一列是B表中的主键,那么A表中这列的数据就受到B表主键的约束。
那么关于主键应该如何设计呢,这里我说下优缺点:
1.用自动增长字段作为主键,这样的主键可以称之为 非业务主键(或逻辑主键、或代理主键),就是说这列与业务无关,仅仅是作为主键而设计。
优点:自增长字段往往是integer bigint类型,最多占8个字节。索引与外键 所占用的空间连带减少,增删改查 效率高。业务变化,不影响,不需要更新主键。
缺点:无法转移数据库,比如把表中的一批数据 转移 或 附带到 另一个表中,那么由于是自增长字段,那么会导致无法转移,因为另外一个表可能已经存在部分数据,会造成主键冲突。自增长字段的缺陷。
业务数据的完整性,无法保证。
2.用全球唯一标识符GUID,来做主键。依然是非业务主键。
优点:可以转移数据库。业务变化,不影响,不需要更新主键。
缺点:字符串较长,占用的空间较多,如果用于外键的话,会导致连带其它表占用的空间连带增多。A表中有一列是B表中的主键 ,那么A表中的这列也是需要有个索引的,即存储空间会连带增多。效率变低。
即除了正常业务字段外,还是弄个字符串字段来专一保存这个全球唯一标识符,造成存储浪费。业务数据的完整性,无法保证。
3.用业务字段做主键。
优点:可以转移数据库,最大化节省了空间,因为并没有 多增加一个非业务字段做主键。业务数据的完整性,可以保证。避免产生垃圾数据,银行就是用业务字段做主键的,虽然效率低,但是安全。
缺点:如果业务发生改变,有可能需要修改主键,举例:国家A表用身份证号做主键,然后其他很多表中的身份证号这列都是来自 身份证表A中的主键(即外键),那么如果身份证号升级,比如从1代升级到2代,那么
那么连带的表的外键 的索引 通通都得发生变化,效率极低 因为会连带更新一串用到这个外键的表,可见用业务字段做主键的话,你得保证 主键不经常变化。
==============
综上:用哪种方式做主键,还是得看业务需求,实际情况,实事求是。根据情况选择,没有固定的标准。
转载于:https://www.cnblogs.com/del88/p/6719176.html
关于主键的设计、primary key相关推荐
- 主键约束(PRIMARY KEY, PK)
主键约束(PRIMARY KEY, PK) 主键约束=非空约束+唯一约束.也就是说设置为主键列,不能够为空,不能够重复. 范例:定义主键约束 --删除数据表 DROP TABLE member PUR ...
- MySQL主键约束(PRIMARY KEY ,PK)
MySQL主键约束(PRIMARY KEY ,PK) 在数据库中使用过程中 如果 想将某个字段作为唯一标识,标记所有内容时,则可以使用PK 约束进行设置.即PK约束在创建数据库表时为某些字段加上&qu ...
- 主键约束(primary key)
10.2.1主键约束(primary key) 特点:不能为空,不重复 方式一:创建表,并且添加主键约束 create table stu1( id int primary key, name var ...
- mysql getgeneratedkeys,JDBC获得数据库生成的主键(JDBC、Primary Key)
JDBC获得数据库生成的主键 佟强 http://blog.csdn.net/microtong 在实际开发中,数据库中表的主键经常会由数据库负责生成,INSERT语句插入数据时插入除了主键以外的字段 ...
- 主键约束(primary key,简称PK)
主键约束的相关术语? 主键约束:就是一种约束. 主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段 主键值:主键字段中的每一个值都叫做:主键值. ...
- 数据库模型设计——主键的设计
在数据库设计时,主要就是对实体和关系的设计,实体表现出来就是表,关系表现出来就是外键.而对于一个表,由两部分组成:主键和属性.主键的简单定义就是表中为每一行数据的唯一标识.其实更准确的说法,每一行数据 ...
- 分布式主键生成设计策略
1 写作目的 这几天被虾皮裁员的消息刷屏了,实话实说互联网的行情确实很差,各处都在裁员.而且最近在忙试用期转正答辩,还不错,光荣的成为了一个大厂的正式员工,很庆幸在这么不稳定的情况下还能有自己的一寸方 ...
- 主外键constraint、primary key、foreign key、check、default的用法和理解
alter table table_6 --向已存在的table_6这个表中再添加字段jj\oo\kk这3个字段 add jj varchar(50),oo int,kk int select *fr ...
- CHIL-ORACLE-主外键约束(primary key / foreign key)
主键约束 要求主键列数据唯一,并且不允许为空 外键约束 用于量表建立关系,需要指定引用朱彪的那列(主表必须是主键)1.主键约束 ( primary key )--例如1:create table te ...
最新文章
- JavaSript模块化 AMD CMD 详解.....
- 在线转flv+flash在线录制视频
- 11月3号晚7点中科院南土所梁玉婷报告:土壤微生物功能组学与关键类群识别
- access mysql字段对应_ACCESS数据库中表与字段名称修改
- 使用 Sealos + Longhorn 部署 KubeSphere v3.0.0
- Python编程专属骚技巧1
- 整理了90个Pandas案例,强烈建议收藏!
- 1.App瘦身经验总结
- rabbitmq接收不到消息 防火墙_用PHP+RabbitMQ实现消息的发送和接收
- SVN-关于分支创建合并
- [转载] 希腊字母读音表
- 导图速读《高性能MySQL》
- 5G+折叠屏:华为Mate Xs打造多项创新体验
- Unity Animator人物模型动画移动偏移
- itest手机考试有监控吗_itest考试有声音监控吗?
- 什么是Windows驱动程序?
- 标准单元库的corner简述
- word批注怎么删除计算机名字,word 2007 如何删除批注者姓名?
- 学大伟业 Day 1 培训总结
- 计算机视觉(十六):目标检测概述
热门文章
- rust怎么不要的墙拆掉_封阳台,栏杆要不要拆掉?栏杆装在玻璃窗里面还是外面...
- access denied for_abm怎么样?ACCESS集团携8大国际品牌在进博会首秀,展示abmr 硬核实力!...
- LQ训练营(C++)学习笔记_栈与递归
- java file ip_java常用工具类 IP、File文件工具类
- 如何只导出mysql表结构_navicat如何只导出表结构
- CSDN移动博文集锦之Android核心分析 (Z)
- Servlet3 -- Servlet异步处理
- 委内瑞拉通胀这么厉害,为什么有钱人不去圈地、买房?
- 历史是“混合体”,也是“内幕”:说说《三国大传》
- BRAND-NEW OF DOUBLES工作组合的新作品