精华内容
下载资源
问答
  • 刚接触关系型数据库的同学,会听过主键和外键的概念。这是关系型数据库的基本概念,需要清楚理解。今天我就以简洁的语言总结一下这个概念。 主键。一句话概括:一张表,可以用于唯一标识一条记录的字段组(或者说...

    刚接触关系型数据库的同学,会听过主键和外键的概念。这是关系型数据库的基本概念,需要清楚理解。今天我就以简洁的语言总结一下这个概念。

    1. 主键。一句话概括:一张表中,可以用于唯一标识一条记录的字段组(或者说是属性组)。给你一个主键的值,你就可以找到一条确定的记录。如: 学生表:学号,姓名,性别,课程。这里学号就是主键。给你一个学号,就可以找到一条学生记录。
      课程表:课程编号,课程名称,学分。这里课程编号就是主键。给你一个课程编号,就可以找到一条课程记录。
      成绩表:学号,姓名,课程编号,成绩。这里学号,课程编号都没法做为主键。因为学号可以对映多个成绩,如张三可以修数学,语文。一个课程编号可以对映多个成绩,如语文课程编号可以对映张三的成绩,也可以对映李四的成绩。但是(学号,课程编号)这个属性组可以作为主键。
    2. 外键。一句话概括:如果一个表A的主键还存在与另一个表B中,那么B中这个字端可以作为A表的外键。(有一种好记的方法是,存在与外面的主键就是外键)。比如上面成绩表的学号是学生表的外键,成绩表的课程编号是课程表的外键。

    主键是唯一的,用于标识一张表。外键可以有多个,用于建立表和表的关系。

    展开全文
  • 关系型数据库主键知识

    千次阅读 2020-09-29 10:33:27
    关系数据库中,一张表的每一行数据被称为一条记录。一条记录就是由多个字段组成的。例如,students表的两行记录: id class_id name gender score 1 1 小明 M 90 2 1 小红 ...

    在关系数据库中,一张表中的每一行数据被称为一条记录。一条记录就是由多个字段组成的。例如,students表的两行记录:

    idclass_idnamegenderscore
    11小明M90
    21小红F95

    每一条记录都包含若干定义好的字段。同一个表的所有记录都有相同的字段定义。

    对于关系表,有个很重要的约束,就是任意两条记录不能重复。不能重复不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键

    例如,假设我们把name字段作为主键,那么通过名字小明小红就能唯一确定一条记录。但是,这么设定,就没法存储同名的同学了,因为插入相同主键的两条记录是不被允许的。

    对主键的要求,最关键的一点是:记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响。

    由于主键的作用十分重要,如何选取主键会对业务开发产生重要影响。如果我们以学生的身份证号作为主键,似乎能唯一定位记录。然而,身份证号也是一种业务场景,如果身份证号升位了,或者需要变更,作为主键,不得不修改的时候,就会对业务产生严重影响。

    所以,选取主键的一个基本原则是:不使用任何业务相关的字段作为主键。

    因此,身份证号、手机号、邮箱地址这些看上去可以唯一的字段,均不可用作主键。

    作为主键最好是完全业务无关的字段,我们一般把这个字段命名为id。常见的可作为id字段的类型有:

    1. 自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键;

    2. 全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。GUID算法通过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键。

    对于大部分应用来说,通常自增类型的主键就能满足需求。我们在students表中定义的主键也是BIGINT NOT NULL AUTO_INCREMENT类型。

     如果使用INT自增类型,那么当一张表的记录数超过2147483647(约21亿)时,会达到上限而出错。使用BIGINT自增类型则可以最多约922亿亿条记录。

    联合主键

    关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。

    对于联合主键,允许一列有重复,只要不是所有主键列都重复即可:

    id_numid_typeother columns...
    1A...
    2A...
    2B...

    如果我们把上述表的id_numid_type这两列作为联合主键,那么上面的3条记录都是允许的,因为没有两列主键组合起来是相同的。

    没有必要的情况下,我们尽量不使用联合主键,因为它给关系表带来了复杂度的上升。

    小结

    主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL

    可以使用多个列作为联合主键,但联合主键并不常用。

    展开全文
  • 浅谈关系型数据库主键设置策略

    万次阅读 2021-03-14 21:21:12
    几乎大多数的应用都会使用关系型数据库进行数据存储,而主键一定是标配。那么,在您的应用,通常使用什么方案来满足业务扩张呢?下面简单介绍普遍做法以及改进之道。 第一层:业务布局之初。众所周知,企业业务刚...

    几乎大多数的应用都会使用关系型数据库进行数据存储,而主键一定是标配。那么,在您的应用中,通常使用什么方案来满足业务扩张呢?下面简单介绍普遍做法以及改进之道。

    第一层:业务布局之初。众所周知,企业业务刚开始,需要进行快速试错,而彼时的数据量不会太多,而且暂时不会存在瓶颈,主要是快速打开市场,提供可运行的软件系统,此时不会太多的去关注存储。(言外之意:创业之初会有技术欠债,随着企业发展壮大,会比较痛)。

    这时,数据一般采用自增型主键,比如mysql或者sqlserver、postgresql的自增型主键,oracle的序列等都可以很好的满足初期技术架构。当然,如果想用UUID等唯一值做主键也是可以的。不过需要注意的是,使用uuid的可读性会比较差,同时使用字符串做主键,其索引比较大,检索效率稍差。推荐用long类型主键。第一层数据库存储如下图所示:

    图片

    第二层:快速扩张期。业务经过几轮迭代,数据量也在极度飞升,单机较难满足业务增长,数据库连接常常第一时间产生瓶颈。因此为了提升数据的存储速度,还有快速扩张,技术会选择分库分表。彼时第一阶段会根据业务内容进行垂直分库,比如电商中常见的按照用户、订单、交易、评论等进行拆分。这时的架构也还是当个数据库,只是按照具体业务内容拆分,其主键依然可以采用第一层次的方案。

    图片

    而随着交易、订单的进一步增长,单库也无法满足性能要求。只能从水平方向上拆分,简单的评估方案是,未来数据存储需要按一亿来计算,单表支撑1千万条数据,最起码需要10张表进行存储。此时会将单库扩张成多张表。此时未考虑到数据库之间的主键不能同步,并同时兼容数据查询高效性。其主键通常会采用分布式ID生成策略,经典有的雪花算法等。此时,单库的自动生成已不再满足业务要求,而uuid等字符型主键因为性能瓶颈也不适合。此时的数据存储架构如下:

    图片

    第三层:未来扩展期。通过良好的分库分表可以友好的解决存储问题,但是使用这种方案对于数据库的前移工作量比较大。如果是比较新的应用,可以采用newsql的方式解决这种方式,业界比较常见的有TiDB,这种数据存储模式避免了分库分表的一些坑,对于上层应用来说就是单体的存储。业务进行到这个地步,主键推荐采用long类型的主键生成器,避免采用字符型主键。

    综上所述,文章简单说明了应用迭代中,主键的一些选型推荐及选择依据。朋友们目前处于什么阶段,当前阶段你们的主键采用什么方式进行生成,欢迎交流。

    图片

    展开全文
  • 关系型数据库主键外键

    千次阅读 2021-01-11 21:55:07
    多对多:必须通过单独的一张表来实现(一个老师多个学生,一个学生多个老师)班级一张表,老师一张表,班级和老师的关系一张表 主键: 定义:能够唯一标示一个事物的一个字段或者多个字段的组合 含有主键的叫做主键表...

    SQL server的基础学习3

    一、什么是关系

    定义:表与表之间的联系
    实现方法:通过设置不同形式的外键来体现表和表的不同关系

    一对一

    既可以把表A的主键充当表B的外键,也可以把表B的主键充当表A的外键(一个人只有一把钥匙,一把钥匙只给一个人)

    一对多

    一对多:把表A的主键充当表B的外键(一个部门有多个员工,一个员工只能在一个部门)
    在多的一方添加外键(在员工表中添加外键即:员工表为外键表,部门表是主键表)
    在这里插入图片描述
    在这里插入图片描述

    多对多

    多对多:必须通过单独的一张表来实现(一个老师多个学生,一个学生多个老师)班级一张表,老师一张表,班级和老师的关系一张表
    在这里插入图片描述
    在这里插入图片描述 在这里插入图片描述

    二、主键和外键

    主键

    定义:能够唯一标示一个事物的一个字段或者多个字段的组合
    附注:
    1、含有主键的叫做主键表,主键通常都是整数,不建议用字符串当主键(如果主键是用于集群式服务,才可以考虑用字符串当主键)
    2、主键的值通常都不允许修改,除非本记录被删除
    3、主键不要定义成id,而要定义成表面_id
    4、要用代理主键,不要用业务主键(任何一张表都不建议使用有业务含义的字段充当主键,我们通常都是在表中单独添加一个整型的编号充当主键字段)

    外键

    定义:如果一个表中的若干个字段是来自另外若干个表的主键或唯一键,则这若干个字段就是外键
    附注:
    1、外键通常都是来自另外表的主键而不是唯一键,因为唯一键可能为null
    2、外键不一定是来自另外的表,也可能来自表的主键(员工表中上层管理人员也是员工中的数据)
    3、含有外键的表叫外键表,外键字段来自的呢一张表叫做主键表
    问题:先删除主键表还是外键表?
    答:先删除外键表
    如果先删除主键表会报错,因为这会导致外键表中的数据引用失败

    展开全文
  • 在基于关系型数据库设计时候,通常要为每张表指定一个主键,所谓主键就是能够唯一标识表某一行记录的属性或属性组,一个表只能有一个主键,但可以 有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保...
  • 关系型数据库表结构的设计,有下面两个设计技巧:  物理主键作为关联的外键  关系型数据库,由多个数据表构成。每一个数据表的结构是相同的,不同表之间可能存在关联关系。表之间的关联关系,正是关系型数据库...
  • 在这种关系,我们可以确定的是,学生和课程关系虽然是多对多,但一个确定的学生id和一个确定的课程id在关系只能存在一个。如下图所示:,业务逻辑就是一个学生只能有当前课程的一个分数。 t_stu...
  • 文章目录一、主键、外键:1.概念2.区别3.作用4.举例:5....一、主键、外键: 1.概念 SQL的主键表示唯一标识一条记录,...外键与主键相对,作用就是通过主外键的之间关系使对张表的数据更好的关联。 2.区别 主键——一个
  • 当前数据库分为关系型数据库和非关系型数据库 关系型数据库 关系型数据库:指采用了关系模型来组织数据的数据库。 关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据...
  • 关系型数据库与非关系型数据库Nosql区别汇总

    万次阅读 多人点赞 2018-08-24 11:14:06
    目录 关系型数据库与非关系型数据库详细比较 关系型数据库与非关系型数据库优缺点对比 关于Nosql ...2.非关系型数据库通常指数据以对象的形式存储在数据库,而对象之间的关系通过每个对象自身的...
  • 当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 非关系型数据库有 NoSql、Cloudant。   ==========================优缺点分析如下================================...
  • 关于关系型数据库基本知识(主键、外键、一对一、一对多、多对一等),适合了解数据库最基本知识的初学者阅读
  • 关系型数据库与非关系型数据库详细比较

    千次阅读 多人点赞 2018-11-12 11:06:02
    关系型数据库与非关系型数据库详细比较 ...3.非关系型数据库中,我们查询一条数据,结果出来一个数组,关系型数据库中,查询一条数据结果是一个对象。 区别 关系型数据库 ...
  • Oracle数据库中主键的智能生成.pdf
  • 关系型数据库与非关系型数据库

    万次阅读 多人点赞 2018-04-18 15:45:07
    当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。非关系型数据库有 NoSql、Cloudant。非关系型数据库的优势: 1. 性能NoSQL是基于键值对的,可以想象成表主键和值的...
  • 传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储,要读取和查询都十分方便。 而非关系型数据不适合这样的表格存储方式,通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构...
  • 一、什么是主键、外键: 关系型数据库中的一条记录有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一...
  • 关系型和非关系型数据库的区别

    千次阅读 2018-11-19 16:57:56
    当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 非关系型数据库有 NoSql、Cloudant。 nosql和关系型数据库比较? 优点: 1)成本:nosql数据库简单易部...
  • Oracle数据库关系型数据库 关系型数据库的基础知识 1,关系型数据库与数据库管理系统 2,关系型数据库的E-R模型 3,关系型数据库的设计范式 一,关系型数据库与数据库管理系统 1,关系型数据库 ①在关系...
  • 数据库中主键与外键的关系,通俗易懂

    万次阅读 多人点赞 2017-12-16 16:13:08
    关系型数据库中的一条记录有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表...
  • 数据库 一、概念 数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。 ...三、NoSQL与关系型数据库的区别 存储方式 传统的关系型数...
  • 一、关系型数据库  关系型数据库,是指采用了关系模型来组织数据的数据库。  关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年,关系模型的概念得到了充分的发展并逐渐成为主流数据库...
  • 关系型数据库: 关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库的数据,...
  • NoSQL并不是关系型数据库管理系统,本文将会介绍NoSQL数据库与关系型数据库之间的差别,同时还会讨论在何种场景下应该使用NoSQL,何种场景下不应该使用。由于NoSQL还是个相对较新的技术,因此它还面临着很多挑战。 ...
  • 关系型数据库的特点 ………………………………………………………………………………….1.关系型数据库 ………………………………………………………………………………………………2. 关系型数据库瓶颈 …………...
  • 2.非关系型数据库通常指数据以对象的形式存储在数据库,而对象之间的关系通过每个对象自身的属性来决定  比如 有一个学生的数据:  姓名:张三,性别:男,学号:12345,班级:二年级一班  还有一个班级的...
  • 关系型数据库的优势: 1、性能 NOSQL是基于键值对的,可以想象成表主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高 2、可扩展性 同样也是因为基于键值对,数据之间没有耦合性,所以非常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,260
精华内容 39,704
关键字:

关系型数据库中的主键