首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈数据主键策略

浅谈数据主键策略 数据表的主键很多童鞋都非常熟悉了,主键就是Primary Key,简称PK。...数据主键的作用是唯一标识一条记录,所以在同一张表中,任意一条记录的主键都是唯一的,不然,数据系统就无法根据主键直接定位记录。...虽然数据系统本身对主键没有特别的要求,但是,写程序的时候,要考虑清楚使用什么类型的主键。正确地使用主键是存储数据成功的一半,错误地使用主键会让一个应用逐渐走向崩溃。...主键不可修改 对于数据来说,主键其实是可以修改的,只要不和其他主键冲突就可以。但是,对于应用来说,如果一条记录要修改主键,那就会出大问题。...这种方式实现复杂,可靠性低,还不如数据自增。 数据自增最大的问题还不在于数据单点造成无法水平切分,因为绝大部分公司还撑不到业务需要分库的情况就倒闭了。

1.4K100

数据主键和外键

主键、外键和索引的区别?...主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值 作用: 用来保证数据完整性 用来和其他表建立联系用的...是提高查询排序的速度 个数: 主键只能有一个 一个表可以有多个外键 一个表可以有多个惟一索引 聚集索引和非聚集索引的区别?...PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束....POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

常见的数据主键选取方式

1、自动增长字段:   自动增长型字段允许我们在向数据添加数据时,不考虑主键的取值,记录插入后,数据系统会自动为其分配一个值,确保绝对不会出现重复。...这是我们设置主键的首选: innodb 中的主键是聚簇索引,会把相邻主键的数据放在相邻的物理存储位置上。...如果主键不是自增,而是随机的,那么频繁的插入会使 innodb 频繁地移动磁盘块; 在innodb中,别的索引还都要包含主键的值,因此建立索引时占用空间小; 利用数字,更容易比较排序。...缺点: 当我们需要在多个数据间进行数据的复制时,自动增长型字段可能造成数据合并时的主键冲突。...)来作为主键,UUID算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID。

1.4K00

数据模型设计——主键的设计

在数据设计时,主要就是对实体和关系的设计,实体表现出来就是表,关系表现出来就是外键。而对于一个表,由两部分组成:主键和属性。主键的简单定义就是表中为每一行数据的唯一标识。...数据主键与业务主键 前面说到一个表可能有很多个唯一标识的候选键,那么这么多候选键中,哪个应该拿来做主键呢?...还有一个原因是业务主键在数据录入的时候不一定是明确知道的,有时我们会在不知道业务主键的情况下,就录入其他相关信息,这个时候,如果使用业务主键做数据主键,那么数据将无法录入。...主键值的生成 主键值的生成可以参考NHibernate的配置,概况下来主要有这么几种生成方式: 自增,这是SQL Server常用的主键生成方式,完全由数据管理主键的值。...,但是由于我们大部分情况下都是使用主键检索数据,所以大部分数据的默认实现,在建立主键时会自动建立对应的索引。

91130

淘宝数据主键如何设计的?

聊一个实际问题:淘宝的数据主键是如何设计的? 某些错的离谱的答案还在网上年复一年的流传着,甚至还成为了所谓的MySQL军规。其中,一个最明显 的错误就是关于MySQL的主键设计。...大部分人的回答如此自信:用8字节的 BIGINT 做主键,而不要用INT。 错 !这样的回答,只站在了数据这一层,而没有 从业务的角度 思考主键主键就是一个自增ID吗?...站在2022年的新年档口,用自增做主键,架构设计上可能 连及格都拿不到 。 自增ID的问题 自增ID做主键,简单易懂,几乎所有数据都支持自增类型,只是实现上各自有所不同而已。...全局唯一保证在各系统之间都是唯一的,单调 递增是希望插入时不影响数据性能。 这里推荐最简单的一种主键设计:UUID。 UUID的特点: 全局唯一,占用36字节,数据无序,插入性能差。...在当今的互联网环境中,非常不推荐自增ID作为主键的数据设计。更推荐类似有序UUID的全局 唯一的实现。 另外在真实的业务系统中,主键还可以加入业务和系统属性,如用户的尾号,机房的信息等。

1.1K20

ASP.NET Ajax

.NET 4.0中所包含的ASP.NET Ajax 是一个完全不一样的Ajax,现在完全采用New BSD协议,也就是完全开源了,它是 CodePlex Foundation (CodePlex.org...Microsoft AJAX 客户端已重构,可以和jQuery协同工作,拆分为单独的文件如下图所示: ? 整个中的单个脚本文件之间的依赖关系如下: ?...上述两副图来自文章:Exploring ASP.NET 4.0—Web Forms and Beyond。...另外在msdn杂志上还有几篇asp.net ajax 4的文章: ASP.NET AJAX 4.0 中的数据绑定 ASP.NET AJAX 4.0 中的条件呈现 ASP.NET AJAX 4.0 中的动态数据绑定...使用 ASP.NET Ajax 的母版-详细信息视图 随便介绍一个JavaScript 代码质量工具JSLint,可对 JavaScript 代码块运行多种静态分析检查。

1.6K50

基于Saas主键表生成主键id

1.主键生成策略方式 ? 主键生成策略 2.基于Saas主键表生成主键id流程 由于我们的系统时基于Saas的,因此生成主键时,需要以租户id(TenantId)为基础进行生成。...为了生成的id符合我们的租户的要求,通常都会现将租户表建好,然后基于租户表中的租户id进行主键id的生成。此时便产生基于租户id生成主键,那么怎样生成主键id呢?可以查看下图: ?...(* com.xtt..*.dao.mapper..*.insert*(..))") public void primaryKeyRule() {} 也就是说在进行主键的生成时,我们拦截好需要生成的主键...拿到租户id后,就可以进行主键id获取了。 private void setPrimaryKey(Object entity, Class<?...return current; } 从而实现主键自增的目的,从而实现基于租户id进行自增的策略。

1.7K20

淘宝数据主键如何设计的?(文末福利)

聊一个实际问题:淘宝的数据主键是如何设计的? 某些错的离谱的答案还在网上年复一年的流传着,甚至还成为了所谓的MySQL军规。其中,一个最明显的错误就是关于MySQL的主键设计。...大部分人的回答如此自信:用8字节的 BIGINT 做主键,而不要用INT。错 ! 这样的回答,只站在了数据这一层,而没有 从业务的角度 思考主键主键就是一个自增ID吗?...站在2022年的新年档口,用自增做主键,架构设计上可能连及格都拿不到 。 1、自增ID的问题 自增ID做主键,简单易懂,几乎所有数据都支持自增类型,只是实现上各自有所不同而已。...全局唯一保证在各系统之间都是唯一的,单调递增是希望插入时不影响数据性能。 这里推荐最简单的一种主键设计:UUID。 1、UUID的特点: 全局唯一,占用36字节,数据无序,插入性能差。...在当今的互联网环境中,非常不推荐自增ID作为主键的数据设计。更推荐类似有序UUID的全局唯一的实现。 另外在真实的业务系统中,主键还可以加入业务和系统属性,如用户的尾号,机房的信息等。

29230

面试必考题-数据自增主键

读完需要6分钟 速读仅需2分钟 无论是做PHP开发还是做JAVA开发甚至前端开发,只要是开发,面试的时候都必考数据。为什么前端也要考数据?...因为数据课程是计算机的基础课程,同样的基础课程还有操作系统,数据结构。只要写代码就永远跳不出这三门基础课。 面试官和面试者都知道要考数据,都会去刷题,数据的知识点其实很少,一天就能刷完。...面试谈到数据肯定会谈到数据引擎,不同索引的数据结构实现,SQL优化等。如果面试官直接问这几个问题,面试者肯定对答如流。...可能是数据越界,也可能是主键冲突,那就没有了标准答案,最后看谁的知识储备更多。一般来说一面面试官的技术不一定比面试者强。 二. 自增ID为什么用不完? 第一个问题是为了引出第二个问题。...因为自增主键通常会设置为`unsigned bigint`,最大值为18446744073709551615,假设我们的项目需要每秒记录100万条数据,这个自增ID使用100万年后都用不完。

89020

mysql 联合主键_Mysql 创建联合主键

char(8), cc date, primary key (aa,bb ) ); aa,bb为联合主键 不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键...主键编号’, `IP` … mysql修改联合主键 参考 https://blog.csdn.net/BockSong/article/details/80933477 alter table TABNAME...NOT NULL ) ON [PRIMARY] GO SET ANSI_PADD … oracle 主键删除,联合主键的创建 1,主键的删除  ALTER TABLE TABLENAME DROP PRIMARY_KEY...运行上面的SQL能够删除主键:假设不成功能够用 ALTER TABLE TABLENAME DROP C … Oracle 主键、联合主键的查询与创建 –查询某个表是否有唯一主键 select cu....联合索引 我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升

8.1K20

ASP连接数据

ASP连接DBF、DBC、MDB、Excel、SQL Server型数据的方法: 一、ASP的对象存取数据方法 在ASP中,用来存取数据的对象统称ADO(Active Data Objects)...,主要含有三种对象:Connection、Recordset 、Command Connection:负责打开或连接数据 Recordset:负责存取数据表 Command:负责对数据执行行动查询命令...二、连接各数据的驱动程序 连接各数据可以使用驱动程序,也可以使用数据源,不过我建议大家使用驱动程序,因为使用驱动程序非常方便、简单,而使用数据源比较麻烦。...ODBC链接 适合数据类型 链接方式 access "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;" dBase...如果你的数据ASP文件在同一目录下,你只要这样写就可以了: dim conn set conn = server.createobject("adodb.connection") conn.open

7.3K30

ASP.NET MVC扩展

很多同学都读过这篇文章吧 ASP.NET MVC中你必须知道的13个扩展点,今天给大家介绍一个ASP.NET MVC的扩展,主要就是针对这些扩展点进行。...如果你和我一样喜欢使用IOC,这个值得你关注,这些IOC我都用过了,现在比较喜欢使用Autofac。...ASP.NET MVC扩展的网站地址是http://www.mvcextension.com/,基于Ms-PL协议的开源,5.11发布了1.0版本,下面介绍一下他的特性: 这个的核心是IOC,却可以让你的代码和...多个IOC的适配器:所有.NET上流行的IOC容器都由适配器。...这个的实际应用的例子可以看这个项目Shrinkr,作者在博客上有几篇文章介绍: MvcExtensions – Bootstrapping Wednesday, May 12, 2010 Announcing

72670

细分主键

主键本身是很简单的,但是围绕他产生的故事就不是那么简单了。 1、 管理 这个是最重要的,没有规矩不成方圆,主键要如何管理一定要实现确定好了,甚至有必要为此写一个规范。...2、 定义 不是说“主键”这个词的定义,而是主键用什么,比如用GUID还是用int,还是年月日时分秒+流水? 3、 生成 主键用什么确定好了之后就是如何生成了。...比如GUID,是在程序里生成,还是由数据的字段默认值来生成?采用无序的GUID还有有序的GUID?再比如int,是采用MSSQL 的自增,还是自己管理。...5、 效率 主键要不要设置索引?聚集的还是非聚集的,还是不用索引?int的和GUID的效率到底差了多少? 6、 移植 要不要考虑数据的移植,以后会不会更换数据?换数据了会不会崩溃?...7、 数据合并 几个分公司的数据需要合并到一起,主键是否会冲突(重复)? 说这些的目的就是想让大家讨论的时候更明确一些,虽然我们都在讨论主键,但是这个范围也是很大的。 欢迎大家继续补充。

63560
领券