数据库主键

数据库(表结构)设计技巧及注意事项

南笙酒味 提交于 2019-12-13 23:03:16
 当您在决定 开发 一个 数据库 管理项目时,最先着手的工作就应是数据库表结构的设计了。可以这么说,表结构的设计是开发数据库管理项目的基石,一个糟糕的表结构设计,可能会严重延误您的项目开发周期,使您大量的劳动时间为此付之东流。表结构设计是数据库逻辑设计的重要组成部分,直接影响到数据库的性能,所以小编在本文对数据库(表结构)设计技巧及注意事项做一个讲解!   1.表名一般以【模块名称_具体表名】来实现,同一个模块的前缀是一样的。( Oracle 大小写敏感,在SQL中可以不用"_",因为可以用大小写一起的写法。这也是可以的)   2.表名称不应该取得太长(一般不超过三个英文单词,不推荐使用中文拼音,总的长度不要超过30个字符)。表名使用英文的原因,有些项目有英文版的需要,或者这个项目是给外国做的时候,使用英文是基本的要求,应该说这是一个习惯问题,多学一点英文也不是坏事   3.不使用tab或tb作为表前缀(本来就是一个表,为什么还要说明)。   4.一些作为多对多连接的表,可以使用两个表的前缀作为表名:如:用户登录表User_Login,用户分组表User_GroupInfo,这两个表建立多对多关系的表名为:User_Group_Relation(关系统一用Relation)。注意一点,主键在做其他表的外键时,或者在被其他表引用时,字段说明和字段名尽量保持一致,比如发帖表BBS

主键和唯一索引的区别

与世无争的帅哥 提交于 2019-12-12 13:08:19
1、主键 主键ID,可以一列或多列,主键既是约束也是索引且是唯一索引,同时也用于对象缓存的键值。 2、索引 组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段) 索引键的大小不能超过900个字节,当列表的大小超过900个字节或者若干列的和超过900个字节时,数据库将报错。 表中如果建有大量索引将会影响INSERT、UPDATET、DELETE语句的性能,因为在表中的数据更改时,所有的索引都将必须进行适当的调整。需要避免对经常更新的表进行过多的索引,并且索引应保持较窄,列要尽可能的少。 为经常用于查询的谓词创建索引,如用于下拉参照快速查找的code、name等。在平台现有下拉参照的查询sql语句中的like条件语句要改成不带前置通配符。还有需要关注Order By和Group By谓词的索引设计,Order By和Group By的谓词是需要排序的,某些情况下为Order By和Group By的谓词建立索引,会避免查询时的排序动作。 对于内容基本重复的列,比如只有1和0,禁止建立索引,因为该索引选择性极差,在特定的情况下会误导优化器做出错误的选择,导致查询速度极大下降。 当一个索引有多个列构成时,应注意将选择性强的列放在前面。仅仅前后次序的不同,性能上就可能出现数量级的差异。

数据库系统简介及数据库介绍

社会主义新天地 提交于 2019-12-12 07:16:15
数据库:保管数据的仓库,是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。 数据库的特点:实现数据共享;减少数据冗余;采用特定的数据类型;具有较高的数据独立性;具有统一的数据控制功能。 数据库表 在关系型数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。 数据类型 数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:整数数据类型、浮点数数据类型、精确小数类型、二进制数据类型、日期/试卷数据类型、字符串数据类型。表中的每一个字段就是某种指定的数据类型。 主键 主键(primary key)又称主码,用于唯一地标识表中的每一条记录,可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值。 数据库系统 数据库系统是由数据库及其管理软件组成的系统,人们常把与数据库有关的硬件和软件系统统称为数据库系统。 数据库系统3个主要的组成部分。 数据库:用于存储数据的地方。 数据库管理系统:用于管理数据库的软件。 数据库应用程序:伪类提高数据库系统的处理能力所使用的管理数据库的软件补充。 数据库(DataBase System)提供了一个存储空间用以存储各种数据

mysql 从头开始(一)

末鹿安然 提交于 2019-12-12 01:29:11
数据库基础 什么是数据库。 数据库是一个以某种有组织的方式存储数据的集合,理解数据库的一种简单的办法就是将其想象成一个文件柜。,此文件柜是一个存放数据库的物理位置,无论数据是以什么形式什么以及如何组织的。 保存有组织的数据的容器 表(table) 某种特定类型数据的结构化清单。数据库中的每个表都有一个名字,用来标识自己,测名字是唯一的,这表示在一个数据库中,没有其他表具有相同的名字。在相同的数据库中不能两次使用相同的表名,但是在不同的数据库中可以使用相同的表名。 模式(schema) : 关于数据库和表的布局以及特性信息。 列和数据类型 表由列组成,列中存储着表中的某部分信息。 列(column) 表中的一个字段。所有的表都是由一个或者多个列组成的。 数据类型(datatype) 所容许的数据的类型。每个表列都有相同的数据类型,它限制(或容许)该列中存储的数据。 数据类型限制可存储在列中的数据种类,还帮助正确的排序数据,并在优化磁盘使用方面起重要作用。 行(row)表中的一个记录。 你可能听过有人在提到行(row)时称其为数据库记录(record)。在很大程度上,这两个术语可以互相代替的,但真正意义上,行才是正确的术语。 主键(primary key)表中的每一行都应该有可以唯一标识自己的一列或一组列,其值能够唯一区分表中的每个行。数据库中应该总是定义主键,虽然并不总是需要主键

MySQL索引面试题详细解析

别等时光非礼了梦想. 提交于 2019-12-11 15:53:25
前言 MySQL是关系性数据库中的一种,查询功能强,数据一致性高,数据安全性高,支持二级索引。但性能方面稍逊于非关系性数据库,特别是百万级别以上的数据,很容易出现查询慢的现象。这时候需要分析查询慢的原因,一般情况下是程序员sql写的烂,或者是没有键索引,或者是索引失效等原因导致的。 正文 问题1:什么是数据库索引? 数据库索引是数据库系统中一个重要的概念,索引也叫做 key ,是一种用于提升数据库查询效率的数据结构,我们可以把索引理解成一本书的目录,通过目录我们可以快速找到对应章节的内容,同样的,通过数据库索引,我们可以快速找到数据表中对应的记录。 总而言之,索引就像给数据表建了一个目录一样。 问题2:为什么在使用索引? 1 . 使用索引大大减少了存储引擎需要扫描的数据量,如果没有使用索引的话,每查询一行数据都要对数据表进行扫描,这样的话会非常慢。 2 . 由于索引已经排好序的,所以对数据表进行 ORDER BY 和 GROUP BY 等操作时,可以很快得到结果。 3 . 索引可以将随机的 I/O 转为顺序的 I/O ,避免高昂的磁盘 IO 成本,提升查询效率。 问题3:MySQL索引在哪个模块中实现的? MySQL 的索引是在存储引擎这一层实现的,因此每一种存储引擎都有不同的实现方式,对同一种索引的处理方式也完成不同。 问题4:为什么设置了索引却不起作用? 如果使用以 % 开头的

Oracle主键约束、唯一约束和唯一索引

三世轮回 提交于 2019-12-10 18:25:04
总结如下: (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除; --建表 create table student( stu_name varchar2(30) not null, age varchar2(4), gender varchar2(2), stuno varchar2(10), class varchar2(5), grade varchar2(5), tno varchar2(10) ); --在创建主键约束、唯一约束的时候,Oracle会隐式的创建一个和该主键约束名字相同的唯一索引 --主键 alter table student add constraint PK_STUNO primary key (stuno); --删除主键约束 alter table student drop constraint PK_STUNO; --唯一约束 alter table student add constraint UK_STUNO unique (stuno); --删除 alter table student drop constraint UK_STUNO; --如果先在列上创建唯一索引,然后再创建唯一约束,这时Oracle发现此列已经存在唯一索引,就不再自己创建 create unique

字段约束,索引,主外键

£可爱£侵袭症+ 提交于 2019-12-10 10:27:23
第 二 节 字段约束,索引,主外键 字段约束条件 1.1 作用:限制如何给字段赋值的 1.2 包括内容有: NULL Key Default Extra NULL 是否允许给字段赋 null 值 null 默认允许赋 null 值 not null 不允许赋 null 值 key 键值类型:普通索引唯一索引全文索引主键外键 Default 默认值作用:当不被字段赋值时,使用默认值给字段赋值 不设置默认值是系统定义的是 null default 值 Extra 额外设置,字段是否设置为自动增加 , 默认没有自动增长功能 案例: 1)建库 Mysql>create database db2; 2)进库 use db2; 3)建表 Mysql>create table t2( >name char(3), >level int(3)zerofill ); Mysql>create table t5( >classroom char(7)default"nsd1801", >name char(5)not null, >age tinyint(2)unsigned zerofill default 18, >sex enum("boy","girl")not null default"boy" ); 4) 表里建值 insert into db2.t1 values("bob",1);

activiti5.10解决分布式集群部署的主键问题

久未见 提交于 2019-12-10 02:21:45
一、概要综述 1、activiti5是jbpm4升级上来的一款最新版工作流引擎,已经将自己的表划分为4类:运行时、通用数据、历史数据、流程相关数据,但是 有一个核心问题就是是否支持集群部署,经过我对源码的初步分析发现,他的默认主键策略是全局获取一个通用表中的字段来做增加,在大并发量的情况下会出现主 键重复的问题 2、activiti5的默认主键策略分析: (1)、每次需要主键的时候从act_ge_property表中的next.dbid中获取下一个主键值,但是主键增长步长是100,也就是说每次从这里获取下一个值的时候,上次是100,下次的值是200. (2)、他们所有需要主键的表都从这个表中获取下一个值 (3)、但是他们针对性能做了一个取巧处理,就是每次步长100,将这个步长cache在本地用sychronize方法调用,也就是说一段时间内只需要在本地获取主键即可,不需要访问数据实时更新,一定程度的缓解了数据库调用压力 (4)、但是对于高并发来说,这个只能局部缓解,并发写入压力,还是有造成主键重复的概率 3、解决方案分析 (1)、因为activiti的主键是统一管理,直接通过集中替换主键策略就可以完成主键策略的替换 (2)、经过分析源码发现activiti的流程引擎的主键引用采用的方式是先看spring配置的 idGenerator 属性是否有外部注入,如果没有

activiti5解决分布式集群部署的主键问题

↘锁芯ラ 提交于 2019-12-10 02:12:44
一、概要综述 1、activiti5是jbpm4升级上来的一款最新版工作流引擎,已经将自己的表划分为4类:运行时、通用数据、历史数据、流程相关数据,但是 有一个核心问题就是是否支持集群部署,经过我对源码的初步分析发现,他的默认主键策略是全局获取一个通用表中的字段来做增加,在大并发量的情况下会出现主 键重复的问题 2、activiti5的默认主键策略分析: (1)、每次需要主键的时候从act_ge_property表中的next.dbid中获取下一个主键值,但是主键增长步长是100,也就是说每次从这里获取下一个值的时候,上次是100,下次的值是200. (2)、他们所有需要主键的表都从这个表中获取下一个值 (3)、但是他们针对性能做了一个取巧处理,就是每次步长100,将这个步长cache在本地用sychronize方法调用,也就是说一段时间内只需要在本地获取主键即可,不需要访问数据实时更新,一定程度的缓解了数据库调用压力 (4)、但是对于高并发来说,这个只能局部缓解,并发写入压力,还是有造成主键重复的概率 3、解决方案分析 (1)、因为activiti的主键是统一管理,直接通过集中替换主键策略就可以完成主键策略的替换 (2)、经过分析源码发现activiti的流程引擎的主键引用采用的方式是先看spring配置的 idGenerator 属性是否有外部注入,如果没有

FISCO BCOS CRUD使用指南

喜你入骨 提交于 2019-12-09 22:58:48
本文将介绍 FISCO BCOS的CRUD功能,帮助开发者更高效便捷地开发区块链应用。 为什么设计CRUD功能? 在FISCO BCOS 1.0中,节点采用MPT数据结构,通过LevelDB将数据存储于本地,这种模式受限于本地磁盘大小,当业务量增大时数据会急剧膨胀,要进行数据迁移也非常复杂,给数据存储带来较大成本和维护难度。 为了突破容量和性能瓶颈,FISCO BCOS 2.0针对底层存储进行了重新设计,实现了分布式存储,带来了容量和性能上的提升。得益于分布式存储采用了库表结构,FISCO BCOS 2.0设计一套CRUD(Create增加、Read读取、Update更新和Delete删除),让接口更加顺其自然。CRUD面向库表的开发方式符合业务开发习惯,同时也为业务开发提供了另外一种选择(以往只能用Solidity合约),从而让区块链应用开发更加便利。 CRUD有哪些优势? CRUD的核心设计思想是提供面向SQL编程的区块链应用开发规范。其好处显而易见,主要体现在两升两降。 提升开发区块链应用的效率 CRUD类似传统业务SQL编程开发模式,大大降低了合约开发难度。开发者将合约当做数据库的存储过程,将区块链数据的读写操作转换为面向表的读写操作,简单易用,极大提升了开发区块链应用的效率。 提升区块链应用的性能 CRUD底层逻辑基于预编译合约实现,其数据存储采用分布式存储