数据库主键和外键的作用
数据库主键和外键的作用
首先介绍一下什么是主键、什么是外键。
1 什么是主键外键
学生表(学号,姓名,性别,班级) 学号是一个主键
课程表(课程号,课程名,学分)课程号是一个主键
成绩表(学号,课程号,成绩)学号和课程号的属性组构成一个主键
成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键
定义:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键
以一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表
2 外键的作用
外键用于保持数据一致性,完整性
主要目的是控制存储在外键表中的数据
3 主键的设计原则
1)主键应当是对用户没有意义的
2)主键应该是单列的,以提高连接和筛选操作的效率
复合键的使用通常出于两点考虑:
a)主键应当具有意义-----这为认为的破坏数据库提供了方便
b)在描述多对多关系的连接表中可以使用两个外部键作为主键------该表可能成为其他从表的主表,并成为从表的主键的一部分,使得之后的从表包含更多的列
3)永远不要更新主键
4)主键不应该包含动态变化的数据(时间戳等)
5)主键应当由计算机自动生成
4 数据库主键选取策略
建立数据库的时候,需要为每张表指定一个主键(一个表只能有一个主键,但是可以有多个候选索引)
常见的主键选取方式有:
1)自动增长型字段
自动增长型主键会省略很多繁琐的工作,但在数据缓冲模式下,不能预先填写主键与外键的值
Order(OrderID,OrderDate) //主键OrderID是自动增长型字段
OrderDetail(OrderID,LineNum,ProductID,Price)
如果要在Order表中插入一条记录,在OrderDetail表中插入若干条记录,为了能在OrderDetail表中插入正确的OrderID字段,必须先更新Order表以获得系统系统分配的OrderID,但是为了确保数据一致性,Order表和OrderDetail表必须在事务保护下同时进行更新,这显然是矛盾的
除此之外,当需要在多个数据库之间进行数据复制时,自动增长型字段可能造成主键冲突
2)手动增长型字段
3)使用UniqueIdentifier SQL Server提供一个UniqueIdentifier数据类型(16字节),并提供一个生成函数NEWID(),生成一个唯一的UniqueIdentifier
4)使用COMB类型
保留UniqueIdentifier的前10字节,后6字节表示生成时间
---------------------------------------------------------------------------------------------------------------------- 1 外键
外键(FK)是用于建立或加强两个表数据之间的链接的一列或多列。
通过将表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接,这个列就成为第二个表的外键
FK约束的目的是控制存储在外表中的数据,同时可以控制对主键表中数据的修改
例如:publishers表中记录出版商的信息,titles表中记录书的信息,如果在publishers 的表中删除一个出版商,而这个出版商的ID在titles表中记录书的信息时被使用了,则这两个表之间关联的完整性将被破坏,即titles表中该出版商的书籍因为与publisher表中的数据没有链接而变的孤立。
FK约束可以防止这种情况的发生,如果主键表中数据的更改使得与外键表中数据的链接失效,则这种更改是不能实现的;如果试图删除主键表中的行或试图修改主键值,而该主键值与另一个表的FK约束值相关,则该操作不可实现。
若要成功的更改或删除FK约束的行,可以现在外键表中删除外键数据或更改外键数据,然后将外键连接到不同的主键数据上去
外键主要是用来控制数据库中的数据完整性的,当对一个表的数据进行操作时,和他有关联的一个表或多个表的数据能够同时发生改变
例子:
A(a,b) :a为主键,b为外键(来自于B.b)
B(b,c,d) :b为主键
A中的b字段要么为空,要么为B表中存在的b值。
数据库的几个概念:主键,外键,索引,唯一索引
数据库的几个概念:主键,外键,索引,唯一索引主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型;外键:定义数据表假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。
用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。
在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。
很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。
这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。
首先我们来创建 parts 表:CREATE TABLE parts (... 字段定义 ...,model VARCHAR(20) NOT NULL,... 字段定义 ...);接下来是Pc表:CREATE TABLE pc (... 字段定义 ...,cpumodel VARCHAR(20) NOT NULL,... 字段定义 ...};设置索引若要设置外键,在参照表(referencing table,即Pc表) 和被参照表(referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。
对Parts表:ALTER TABLE parts ADD INDEX idx_model (model);这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。
对Pc表也类似:ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);事实上这两个索引可以在创建表的时候就设置。
【数据库】主键,外键,主表,从表,关联表,父表,子表
【数据库】主键,外键,主表,从表,关联表,⽗表,⼦表⼀、前⾔在设计中,hibernate,iBatis等ORM框架的使⽤中经常听说主键,外键,主表,从表,关联表,⽗表,⼦表之类的术语,弄懂它们之前的区别与联系对于和ORM框架的学习使⽤是⾮常有必要的。
⼆、概述下⾯从数据库设计⾓度,ORM框架使⽤(以Hibernate为例),PowerDesigner软件以及实际业务⾓度进⾏⼀下介绍。
(1) 数据库⾓度⽽⾔主键:⼀般情况下,满⾜第⼀范式的表都有⼀个主键Primary key,⽤于唯⼀标⽰数据库中的⼀个字段。
外键:外键是相对于数据库设计中的参考完整性⽽⾔,它与主键之间是彼此依赖的关系。
假设现在有两个表,产品分类表ProductCategory(主键CategoryId)和产品信息表Product(主键ProductId),每类产品都属于⼀个分类。
那么如果产品信息表肯定需要参考产品分类表进⾏定义。
因为如果没有产品分类表,⼜何谈产品分类呢。
所以产品信息表Product需要引⽤ProductCategory中的主键CategoryId 进⾏产品分类定义,Product表中引⽤CategoryId的字段就是外键。
在概念模型(Concept Model)中,从产品分类⾓度看,产品分类和产品之间就是⼀对多的关系,⼀个分类下可以有多个产品。
从产品⾓度看,产品和产品分类之间是多对⼀的关系,多种产品属于⼀个分类。
主表:在数据库中建⽴的表格即Table,其中存在主键(primary key)⽤于与其它表相关联,并且作为在主表中的唯⼀性标识。
(摘⾃百度百科)从表:以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进⾏关联查询。
从表与主表通过外键进⾏关联查询。
(摘⾃百度百科)关联表:两个数据库及其(数据)表之间的数据的相互依赖和影响关系。
⽐如现有某学校三个数据表:学⽣(学号,姓名),课程(课程名,课程编号),选课(学号,课程号,成绩)。
数据库中的主键与外键介绍
2手动增长型字段既然自动增长型字段会带来如此的麻烦,我们不妨考虑使用手动增长型的字段,也就是说主键的值需要自己维护,通常情况下需要建立一张单独的表存储当前主键键值。还用上面的例子来说,这次我们新建一张表叫IntKey,包含两个字段,KeyName以及KeyValue。就像一个HashTable,给一个KeyName,就可以知道目前的KeyValue是什么,然后手工实现键值数据递增。在SQL
Server中可以编写这样一个存储过程,让取键值的过程自动进行。代码如下:
CREATE PROCEDURE[GetKey]
@KeyNamechar(10),
@KeyValue intOUTPUT AS UPDATE IntKey SET @KeyValue =KeyValue = KeyValue + 1
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
主键是能确定一条记录的唯一标识,比如,一条记录包括身份证号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
COMB数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与UniqueIdentifier组合起来,在保留UniqueIdentifier的唯一性的同时增加了有序性,以此来提高索引效率。也许有人会担心UniqueIdentifier减少到10字节会造成数据出现重复,其实不用担心,后6字节的时间精度可以达到1/300秒,两个COMB类型数据完全相同的可能性是在这1/300秒内生成的两个GUID前10个字节完全相同,这几乎是不可能的!在SQL
数据库表描述
数据库表描述全文共四篇示例,供读者参考第一篇示例:数据库表是数据库系统中的基本组成单元,用来存储特定类型的数据。
它由行和列组成,行代表数据记录,列代表数据属性。
在数据库设计中,表的结构和字段类型需要经过精心设计,以确保数据的存储和检索效率。
本文将探讨数据库表的描述和设计方法。
一、数据库表的描述1. 表名:数据库表需要有一个唯一的名称来区分不同的表。
表名应该简洁明了,能够清晰地表达表所存储的数据类型。
一般来说,表名采用复数形式,并使用下划线或驼峰命名规则。
2. 字段(列):数据库表由多个字段组成,每个字段代表数据的一个属性。
字段的命名应该具有描述性,能够清晰地表达该字段存储的数据内容。
常见的字段类型包括整型、字符型、日期型等。
3. 数据类型:字段的数据类型决定了字段可以存储的数据范围和格式。
常见的数据类型包括整型(INT)、字符型(VARCHAR)、日期型(DATE)等。
选择合适的数据类型可以提高数据库的存储效率和数据完整性。
4. 主键:主键是表中用来唯一标识每条记录的字段,通常是一个或多个字段的组合。
主键的值必须唯一且不能为空,可以通过主键索引来加快数据检索速度。
主键的选择应该遵循唯一性和稳定性原则。
5. 外键:外键是表与表之间建立关联关系的依据。
外键是指在一个表中存在的另一个表的主键,用来确保数据的一致性和完整性。
外键约束可以在数据库设计时设置,以确保引用表的数据不会出现错误或不一致。
6. 索引:索引是一种提高数据检索效率的数据结构,可以加速查询操作。
在数据库表中设置适当的索引可以减少搜索时间,并提高数据库的性能。
常见的索引类型包括主键索引、唯一索引、组合索引等。
7. 约束:约束是用来确保数据完整性和一致性的规则。
常见的约束包括主键约束、唯一约束、外键约束、默认值约束等。
在设计数据库表时,应该根据业务需求和数据关系来设置适当的约束。
二、数据库表的设计方法1. 标识表的对象:在设计数据库表时,首先需要确定要存储的数据对象和关系,然后根据需求来设计表的结构和字段。
SQL中的主键和外键
主键与外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别收藏聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
而主键和外键的结构是这个设计过程的症结所在。
一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:关系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途:1. 惟一地标识一行。
指出主键和外键用的符号
指出主键和外键用的符号
主键一般用符号“PK”表示,代表“primary key”;外键一般用符号“FK”表示,代表“foreign key”。
在数据库设计中,主键和外
键通常作为表之间建立关系的重要依据。
主键:
主键是一种用于唯一标识数据表中每条记录的列或一组列。
它的作用是保证表中数据的唯一性和完整性,防止出现重复或错误的数据。
在一个表中,只能定义一个主键,它不能为NULL。
常见的主键类型有自增长整数,GUID(全局唯一标识符)等。
外键:
外键是一种用于连接两个或多个数据表的列。
它指向另一张表的主键,用于维护表之间的关系,以保证数据之间的完整性和一致性。
外键列通常需要在两个表中使用相同的数据类型和长度,并且不能为NULL。
当使用外键时,需要定义它所关联的表、字段名称和删除/更新时的操作规则等信息。
参考内容:
- 「数据库设计基础-主键和外键」
- 「数据库索引设计:主键、外键、唯一索引」
- 「MySQL 初学日记(四)主键和外键」。
数据库中的主键与外键的关系,通俗易懂
数据库中的主键与外键的关系,通俗易懂在设计关系型数据库时,主键和外键是两个非常重要的概念。
主键和外键之间有密切的关系,它们在数据库中起着至关重要的作用。
本文将介绍主键和外键及其之间的关系,旨在让读者更好地理解这些概念。
一、主键的定义主键是指在关系数据库中唯一标识一条记录的字段或一组字段。
它能够保证数据库表中每个元素的唯一性,即每个元素都有其独特的主键值。
主键通常包括表中的一个或多个列,能够帮助我们更快速地搜索、更新、删除数据。
例如,在一个存储学生信息的表中,每个学生都有唯一的学号,因此可以将学号设为主键。
二、外键的定义外键是指在关系数据库中链接两个表之间关系的一列或多列。
它指向另一个表的主键,并且其值必须与那个主键相对应。
外键可用于保证数据完整性,例如在一个课程表和学生信息表中,课程表中可以使用学生信息表的学号列作为外键,以表现学生和其所选课程之间的关系。
三、主键和外键的关系在关系型数据库中,主键和外键之间的关系非常密切。
通过主键和外键的链接,我们可以建立不同表之间的关系,实现数据的连接和共享。
具体地说,主键和外键之间可以建立如下关系:1.主键可以作为外键的来源在关系型数据库中,可以将一个表的主键列引用另一个表的主键,以此建立两个表之间的关系。
这是一种非常常见的操作,例如在一个数据仓库中,可能有多个维度表与事实表共同工作,维度表中的主键被用作事实表的外键。
2.外键引用主键外键是通过引用另一个表的主键来建立的。
当在外键上插入新值时,系统会检查该值是否存在于关联的主键中。
如果值不存在,则插入操作将失败,从而保证了数据表之间的关联性和完整性。
3.主键和外键可以形成复合键在有些情况下,一个表不仅有一个主键,还有多个列,可以用这些列来联合参加主键的建立,这就是复合键。
同样,一个外键可以由多列来共同构成。
复合键的优势在于提供更严格的数据完整性约束,防止了重复数据和非法数据的产生。
总之,主键和外键是关系型数据库设计中最基本的概念之一。
主键和外键的作用
主键和外键的作用1.主键的作用:主键是一种用于唯一标识表中每一行记录的字段或字段组合。
主键具有以下几个作用:1.1唯一标识记录:主键字段的值在表中必须是唯一的,不可重复。
通过主键,可以在表中快速准确地定位和识别特定的记录。
1.2确保数据完整性:主键的存在可以确保数据的完整性。
每一行记录都必须有一个主键值,如果一些记录没有主键值,则违反了数据完整性的原则。
主键可以避免数据的冗余和重复,保证数据的一致性。
1.3帮助建立表之间的关系:主键可以用来建立表与表之间的关联关系。
在多表查询或者数据检索时,可以通过主键关联两个或多个表的记录,实现表之间的数据一致性和准确性。
1.4作为外键的参照对象:主键可以被其他表中的字段引用作为外键,用于建立表之间的关联关系。
在外键关系中,主键扮演着被引用的角色,提供数据一致性和数据完整性的保证。
2.外键的作用:外键是一种存在于一个表中,但是指向其他表中主键的字段。
外键的作用如下:2.1建立表之间的关系:外键可以用来建立表与表之间的关联关系。
通过外键,可以将多个表中的数据关联起来,为数据库的设计提供了一种有效的方式。
2.2提供数据一致性和完整性的保证:通过外键,在多表操作或者数据检索时,可以确保数据的一致性和完整性。
外键可以限制在一个表中插入、更新或删除数据的操作,保证了数据的准确性和一致性。
2.3实现数据级联操作:外键可以实现数据级联操作。
当主表中的记录被删除或者更新时,通过外键的约束关系,会自动触发对应的从表中的记录的删除或更新操作,保证数据的完整性和一致性。
2.4处理表之间的关系:外键可以处理表之间的关系,如一对多关系、多对多关系等。
通过外键,可以实现表之间的连接、关联和查询,提供了数据的灵活性和可扩展性。
综上所述,主键和外键在关系数据库中发挥着重要的作用,不仅可以确保数据的完整性和一致性,还可以建立表与表之间的关联关系。
主键用于唯一标识记录,保证数据的完整性和准确性,同时用作外键的参照对象。
数据库键的概念
数据库键的概念数据库键是数据库中用于唯一标识和索引数据记录的一种机制。
它可以帮助数据库系统快速定位、访问和操作数据。
下面将对数据库键的概念进行详细解释。
1. 什么是数据库键数据库键是数据库表中用于唯一标识每条记录的一列或一组列。
它们具有唯一性,即每个键值都是唯一的,用于在数据库中区分不同的数据记录。
数据库系统使用键来进行数据的查找、排序和关联。
2. 主键(Primary Key)主键是数据库表中的一列或一组列,用于唯一标识每条记录。
主键的值不能重复,而且不能为空值。
主键可以由一列或多列组成,称为复合主键。
主键的作用是保证数据的完整性,防止重复和不一致的数据记录。
例如,一个用户表的主键可以是用户ID列。
3. 外键(Foreign Key)外键是数据库表中的一列,用于建立表与表之间的关联关系。
外键引用了另一个表的主键,将两个表联系在一起。
外键的作用是维护表与表之间的数据一致性,并实现数据的关联查询。
例如,一个订单表中的外键可以引用一个用户表中的主键,表示订单是由哪个用户所创建的。
4. 唯一键(Unique Key)唯一键是数据库表中的一列或一组列,用于确保每个键值都是唯一的,但允许空值。
与主键不同,唯一键允许有多个空值。
唯一键的作用是防止出现重复的数据记录。
例如,一个邮箱表中的唯一键可以是邮箱地址列,确保每个邮箱地址只能出现一次。
5. 索引(Index)索引是一种特殊的数据结构,用于提高数据库的查询效率。
它是基于数据库键创建的,可以加快数据的查找和排序。
索引通常包含键的值和指向数据记录的指针。
数据库系统使用索引来快速定位需要查询的数据记录,减少数据扫描的时间。
例如,一个电话号码列可以创建一个索引,加快根据电话号码查询用户信息的速度。
总结起来,数据库键是用于唯一标识和索引数据记录的一种机制。
主键用于唯一标识记录,外键用于建立表与表之间的关联关系,唯一键用于确保键值的唯一性,索引用于加快数据的查找和排序。
SQL的主键和外键的作用
SQL的主键和外键的作用首先,主键是一列或一组列,其作用是唯一地标识一个表中的每一条记录。
它具有以下作用:1.数据唯一性约束:主键保证表中的每条记录具有唯一的标识,确保了数据的唯一性。
2.快速数据访问:通过主键,可以快速定位到表中的其中一条记录,提高数据的访问速度。
3.定义表之间的关系:在表之间建立关联时,主键作为外键的参照,起到了关联的作用。
4.提供索引:主键通常会自动创建一个索引,加快数据查找和排序。
主键有以下几种类型:1.单字段主键:一个表中只有一个字段作为主键。
2.复合主键:一个表中多个字段组合起来作为主键,确保组合字段的唯一性。
3.自增主键:主键的值会自动递增,常用于自动生成唯一标识符。
其次,外键是一个或多个表中的列,它建立了表之间的关联关系。
外键所在的表称为子表,参照外键的表称为父表。
1.建立表之间的关联:外键通过关联表之间的共同数据,建立了表与表之间的关联关系。
这种关联关系可以是一对一、一对多或多对多的关系。
2.数据完整性约束:外键保证在子表中如果存在外键,则在父表中必须存在相对应的值。
它确保了数据的完整性和一致性,防止出现孤立的记录。
3.级联更新与删除:在设定外键关联时,可以设置级联更新与删除。
当父表的记录被更新或删除时,所有相关的子表记录也会更新或删除,确保数据的一致性。
4.查询优化:外键可以用于连接两个或多个表,进行关联查询,提高查询效率。
需要注意的是,外键并不一定要与主键建立关联,它可以与任意唯一的键或索引字段建立关联。
此外,外键的使用还需要满足一些条件,如被关联的字段必须是一个已经定义了唯一性约束的字段。
在实际的数据库设计和应用中,主键和外键都被广泛地运用。
通过使用主键和外键,可以建立起复杂的数据模型,保证数据的完整性和一致性,并实现不同表之间的关联查询。
这在数据库管理和数据处理中起着至关重要的作用。
