数据库中的主键与外键介绍
数据库主从表、关系;主、外键关系和作用(转)
系数据库依赖于主键---它是数据库物理模式的基石。 主键在物理层面上只有两个用途 1.惟一地标识一行。 2.作为一个可以被外键有效引用的对象。
基于以上这两个用途 下面给出了我在设计物理层面的主键时所遵循的一 些原则 1.主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的 连接表中的数据 并抱怨它没有什么用处 那就证明它的主键设计地很好。 2.主键应该是单列的 以便提高连接和筛选操作的效率。 注 使用复合键的人通常有两个理由为自己开脱 而这两个理由都是错误 的。其一是主键应当具有实际意义 然而 让主键具有意义只不过是给人为地 破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表 中使用两个外部键来作为主键 我也反对这种做法 理由是 复合主键常常导 致不良的外键 即当连接表成为另一个从表的主表 而依据上面的第二种方法 成为这个表主键的一部分 然 这个表又有可能再成为其它从表的主表 其主 键又有可能成了其它从表主键的一部分 如此传递下去 越靠后的从表 其主 键将会包含越多的列了。 3.永远也不要更新主键。实际上 因为主键除了惟一地标识一行之外 再 没有其他的用途了 所以也就没有理由去对它更新。如果主键需要更新 则说 明主键应对用户无意义的原则被违反了。 注 这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整 理的数据并不适用。 4.主键不应包含动态变化的数据 如时间戳、创建时间列、修改时间列等。 5.主键应当有计算机自动生成。如果由人来对主键的创建进行干预 就会 使它带有除了惟一标识一行以外的意义。一旦越过这个界限 就可能产生认为 修改主键的动机 这样 这种系统用来链接记录行、管理记录行的关键手段就 会落入不了解数据库设计的人的手中。
例如: 学生表(学号,姓名,…………)主键:学号 课程表(课程号,课程名,…………)主键:课程号 一个学生能选多门课,一个课可以由多个学生选,即是多对多关系, 那么成绩表就是它们之间关系的体, 即引用成绩表(学号,课程号,成绩)。这里学号和课程号,分别是学生表和课程表中学号和课程号的外键 在我们现在这个阶段中,主要还是使用,主外键间的一对多的关系 主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一。 外键Foreign,是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!
数据库主从表主键外键知识
A表的主键在B表中充当外键,谁是主表,谁是子表?A为主表B为从表个人认为:外键是约束的一种。
不存在主从关系,只存在引用关系,如部门表与员工表。
每个员工都属于某个部门,必须与某个部门资料对应。
主从表的情况:类似于订单表与订单明细表的关系。
希望以上有所帮助.有两个表 A表中的C字段里面的内容是B表中的主键,并且值有多个,请问数据库该怎么设计啊?create tableB(C char(6) primar y key,C_Name varcha r(50) not null)gocreate tableA(A_ID char(6) primar y key,A_Name varcha r(100) not null,C char(6) refere ncesB(C) --将A表中C字段设置外键)go从表的外键与主表的主键的列名必须相同吗?值呢?列名不一定要相同,但是外键的取值要么从主键的域中取要么取空值,这在数据库中叫做参照完整性规则。
主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
而主键和外键的结构是这个设计过程的症结所在。
一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:关系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途:1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:1. 主键应当是对用户没有意义的。
如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
数据库中主键与外键的理解
数据库中主键与外键的理解在关系型数据库中,数据结构有逻辑结构和物理结构。
物理结构指存储在物理介质上的数据文件的结构。
逻辑结构即关系,也就是一张张的二维表。
表中的一列即为一个字段(属性),代表的是实体的一个属性。
表中的一行即为一条记录。
如:学生表中(学号,姓名,年龄,性别),在该表中有4个字段,代表学生实体的4个属性。
表中的一行数据(001,张三,男,20),即一条记录,表示的是张三这个学生的信息。
在表中,用来唯一标识一条记录的字段集,叫做主关键字或者主关键码,简称主键(主码),而主键包含的属性(字段)叫做主属性,其他的则为非主属性。
在这里说明一下,既然是“字段集”,那么主键就可能是一个字段或者多个字段。
例如上面的学生表,用下划线表示的学号,就是能唯一标识一个学生的字段,学号字段就是该表的主键。
由于学生的姓名重名是不可避免的,所以一般不用姓名来作为唯一标识一个学生的主键。
再举个例子说明一下多个字段作为主键。
例如学生选课表(学号,课程号,成绩),在学生选课表中,主关键字是(学号,课程号)。
原因显而易见,一个学生可以选择多门课程,一个课程可以被多个学生选择。
如果单单是用学号或者课程号,都不足以唯一标识一条记录。
对于外键的理解,在这里我也举个例子。
假设有两个表,学生表(学号,姓名,年龄,性别,专业编号),专业信息表(专业编号,专业名称,专业备注信息)。
学生表中主键是学号,专业信息表中主键是专业编号。
学生表中的非主属性专业编号恰好是专业信息表中的主键。
我们就称这个专业编号是学生表的外键。
像这样,一个表的非主属性是另一个表的主属性,该非主属性就是外键。
数据库的约束有三种,实体完整性约束、参照完整性约束和用户自定义约束。
1.实体完整性约束指的是主键不能为空,如果主键为空了还怎么唯一标识一条记录。
2.参照完整性约束,即外键的约束,某一外键的值必须在它引用的主键字段中存在。
如,学生表中专业编号属性的值,必须都存于专业信息表中的专业编号属性中。
数据库的几个概念:主键,外键,索引,唯一索引
数据库的几个概念:主键,外键,索引,唯一索引主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如: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)的表,可以通过外键与主表进⾏关联查询。
从表与主表通过外键进⾏关联查询。
(摘⾃百度百科)关联表:两个数据库及其(数据)表之间的数据的相互依赖和影响关系。
⽐如现有某学校三个数据表:学⽣(学号,姓名),课程(课程名,课程编号),选课(学号,课程号,成绩)。
数据库中外键的定义
数据库中外键的定义
数据库中外键是一种约束条件,用于确保在关系数据库中的两个表之间的数据完整性。
外键定义了一个表中的字段,该字段引用另一个表中的主键。
当在一个表中插入、更新或删除数据时,外键可以确保相关的表保持一致性。
如果试图在一个表中插入一个不符合外键约束的值,数据库会拒绝操作。
外键通常用于维护关系型数据库中的表间一致性,确保数据的正确性。
在创建外键时,必须确保引用的主键是唯一的,并且在另一个表中存在。
另外,外键也可以用来连接不同表之间的数据,使得查询数据更加灵活和方便。
在数据库设计中,外键是一种重要的概念。
正确地使用外键可以有效地保证数据的完整性和一致性,从而提高数据库的可靠性和稳定性。
- 1 -。
SQL中的主键和外键
主键与外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别收藏聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
而主键和外键的结构是这个设计过程的症结所在。
一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:关系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途:1. 惟一地标识一行。
指出主键和外键用的符号
指出主键和外键用的符号
主键一般用符号“PK”表示,代表“primary key”;外键一般用符号“FK”表示,代表“foreign key”。
在数据库设计中,主键和外
键通常作为表之间建立关系的重要依据。
主键:
主键是一种用于唯一标识数据表中每条记录的列或一组列。
它的作用是保证表中数据的唯一性和完整性,防止出现重复或错误的数据。
在一个表中,只能定义一个主键,它不能为NULL。
常见的主键类型有自增长整数,GUID(全局唯一标识符)等。
外键:
外键是一种用于连接两个或多个数据表的列。
它指向另一张表的主键,用于维护表之间的关系,以保证数据之间的完整性和一致性。
外键列通常需要在两个表中使用相同的数据类型和长度,并且不能为NULL。
当使用外键时,需要定义它所关联的表、字段名称和删除/更新时的操作规则等信息。
参考内容:
- 「数据库设计基础-主键和外键」
- 「数据库索引设计:主键、外键、唯一索引」
- 「MySQL 初学日记(四)主键和外键」。
MySQL中的主键与外键关系解析
MySQL中的主键与外键关系解析MySQL是一种常用的关系型数据库管理系统,被广泛应用于各种网络应用和企业级系统中。
在MySQL中,主键和外键是两个非常重要的概念。
本文将深入解析MySQL中的主键与外键关系,探讨其作用、用法以及相关注意事项。
一、主键的概念与作用主键(Primary Key)是在表中唯一标识每一条记录的一列或一组列。
它具有以下作用:1. 唯一性约束:主键要求每个记录在主键列上的值都是唯一的,不允许重复。
2. 快速索引:主键列会自动在数据库中创建索引,这使得通过主键进行查询和排序等操作更加高效。
3. 数据完整性保护:主键可以保证数据库中的数据完整性,防止数据重复、数据丢失等问题。
二、主键的定义与使用在MySQL中定义主键有两种常见的方式:1. 在创建表时定义主键:```CREATE TABLE 表名 (列名数据类型 PRIMARY KEY,...);```在创建表的过程中,可以通过在列的定义后添加PRIMARY KEY关键字来指定该列作为主键。
如果一个表中存在多个列,也可以将多个列组合成一个主键。
2. 修改已存在的表添加主键:```ALTER TABLE 表名ADD PRIMARY KEY (列名);```使用ALTER TABLE语句可以向已存在的表中添加主键。
在列名后添加PRIMARY KEY关键字即可。
主键的使用需要注意以下几点:1. 主键列的值不能为空:为了保证唯一性约束,主键列的值不能为空。
可以通过在列的定义时添加NOT NULL关键字来确保该列不为空。
2. 主键的选择:主键应该是一个稳定且唯一的值。
一般情况下,可以选择自增长的整数作为主键,也可以选择字符串类型的列,只要保证该列的值在整个表中唯一。
3. 主键的更新:一旦表中的数据被创建,主键的值就不能被更新。
如果需要更改主键的值,只能通过删除原记录,然后插入新记录的方式来实现。
三、外键的概念与作用外键(Foreign Key)是用于建立表与表之间联系的一列或一组列。
数据库事务、主键与外键的区别?
数据库事务、主键与外键的区别?数据库中的事务、主键和外键是数据库设计和管理中的关键概念,它们有不同的作用和用途。
1. 事务(Transaction):•事务是数据库管理系统中的一个操作单元或工作单元,它包含一系列的数据库操作(例如插入、更新、删除),并被视为一个不可分割的工作单元。
•事务具有四个特性,通常称为 ACID 特性:•原子性(Atomicity):事务是一个原子操作,要么全部执行,要么全部不执行。
•一致性(Consistency):事务的执行使数据库从一种一致状态转移到另一种一致状态。
•隔离性(Isolation):事务的执行是相互隔离的,一个事务的执行不应影响其他事务。
•持久性(Durability):一旦事务被提交,它对数据库的改变应该是永久性的。
2. 主键(Primary Key):•主键是一种用于唯一标识数据库表中记录的字段或一组字段。
•主键必须包含唯一且非空的值,确保每条记录都能够被唯一地标识。
•一个表可以有一个或多个字段组成复合主键。
3. 外键(Foreign Key):•外键是一个字段或一组字段,它与另一表的主键或唯一键形成关联。
•外键用于建立表之间的关系,确保引用表中的每个外键值都在被引用表的主键或唯一键中存在。
•外键用于维护数据的完整性和一致性,它可以防止无效的引用和维护表之间的关联关系。
总结:•事务是数据库中的操作单元,具有 ACID 特性,确保数据库的完整性和一致性。
•主键是用于唯一标识表中记录的字段,它必须包含唯一且非空的值。
•外键是用于建立表之间关系的字段,它与另一表的主键或唯一键形成关联,用于维护数据的完整性。
MySQL数据库中的主键和外键约束定义
MySQL数据库中的主键和外键约束定义MySQL是一种非常流行的关系型数据库管理系统,被广泛应用于各种Web应用程序和企业级应用中。
在MySQL数据库中,主键和外键约束是用来确保数据完整性和一致性的重要机制。
本文将深入探讨MySQL数据库中的主键和外键约束定义,以及它们的作用和应用。
一、主键约束定义在MySQL数据库中,主键约束是用来唯一标识表中每一行数据的列。
一个表只能有一个主键,主键值必须唯一且不为空。
通过主键约束,可以方便地对表中的数据进行快速检索和高效的数据操作。
主键可以定义在一个或多个列上,当主键定义在多个列上时,称为复合主键。
定义复合主键时,需要确保每个列的组合值是唯一的。
例如,一个学生表可以将学号和班级号作为复合主键,保证了学生表中每个学生的学号和班级号的唯一性。
主键可以通过以下方式来定义:1. 在创建表时定义主键约束```sqlCREATE TABLE students (stu_id INT PRIMARY KEY,stu_name VARCHAR(50),stu_age INT);```2. 在表已存在的情况下,使用ALTER TABLE语句添加主键约束```sqlALTER TABLE studentsADD PRIMARY KEY (stu_id);```二、外键约束定义外键约束是用来建立两个表之间的关联关系的约束,用来维护表与表之间的数据完整性。
外键关联的两个表分别称为主表和从表,主表中的列被称为主键,从表中的列被称为外键。
外键约束的作用是确保了从表中的外键值必须存在于主表的主键中,或者为NULL。
外键约束可以实现数据的一致性和完整性,防止数据的不一致和冗余。
外键可以通过以下方式来定义:1. 在创建表时定义外键约束```sqlCREATE TABLE classes (class_id INT PRIMARY KEY,class_name VARCHAR(50));CREATE TABLE students (stu_id INT PRIMARY KEY,stu_name VARCHAR(50),stu_age INT,class_id INT,FOREIGN KEY (class_id) REFERENCES classes(class_id));```2. 在表已存在的情况下,使用ALTER TABLE语句添加外键约束```sqlALTER TABLE studentsADD FOREIGN KEY (class_id) REFERENCES classes(class_id);```三、主键和外键约束的作用和应用1. 数据完整性和一致性:通过主键约束,可以确保表中的每一行数据都有唯一的标识,避免了数据的重复和冲突。
MySQL的主键与外键使用技巧
MySQL的主键与外键使用技巧MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种Web应用程序中。
在数据库设计和优化中,主键和外键是两个重要的概念。
主键是用来唯一标识表中的每一行数据的字段,而外键则用于建立表与表之间的关联关系。
本文将探讨MySQL中主键和外键的使用技巧,以帮助读者更好地理解和应用它们。
1. 主键的定义和作用主键是表中的一列,用于唯一标识表中的每一行数据。
它的值不能重复且不能为空。
主键有助于提高数据的检索效率,因为数据库可以通过主键来快速定位和访问指定的数据行。
在MySQL中,可以使用关键字PRIMARY KEY来定义主键。
一般来说,主键最好是一个自增的整数类型,如INT或BIGINT。
这是因为自增主键的值是按照一定的规律自动生成的,不容易与其他数据行发生冲突。
2. 主键的选择和设计在选择主键时,应该考虑以下几个方面:a) 唯一性:主键的值在整个表中是唯一的,能够明确地标识一条数据行。
b) 稳定性:主键的值是不变的,不会受到业务逻辑变动或数据更新的影响。
c) 简洁性:主键的类型和长度应尽量简洁,这有助于提高数据库的性能和节省存储空间。
在设计主键时,还可以考虑以下几种方式:a) 单一字段主键:选择表中的某个字段作为主键,如用户表中的用户ID字段。
这种方式简单直观,但在一些特殊情况下可能不适用,比如需要联合多个字段来唯一标识一条数据行。
b) 自增主键:使用一个自增的整数类型字段作为主键,如订单表中的订单ID字段。
这种方式方便快捷,且可以很好地支持数据的插入和检索。
c) UUID主键:使用一个全局唯一标识符(UUID)作为主键,如图书表中的图书ID字段。
UUID是一个128位的数字,具有极低的重复概率,适用于分布式系统和高并发场景。
3. 外键的定义和作用外键是用于建立表与表之间关联关系的字段。
它可以将一个表中的数据行与另一个表中的数据行进行关联。
外键有助于确保数据的完整性和一致性,因为数据库可以通过外键来检查和约束数据的插入和更新操作。
外键和相应的主键之间的关系
外键和相应的主键之间的关系
外键一定是另外某个表的主键。
1.能够唯一表示数据表中的每个记录的字段或者字段的组合称为主键,一个主键是唯一识别一个表的每一行记录,但这只是其作用的一部分。
2.主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录。
3.主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义。
4.若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。
5.在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通。
主键和外键
主键:
主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。
这样的一列或多列称为表的主键,通过它可强制表的实体完整性。
当创建或更改表时可通过定义PRIMARY KEY 约束来创建主键。
一个表只能有一个PRIMARY KEY 约束,而且PRIMARY KEY 约束中的列不能接受空值。
由于PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。
作用:
1)保证实体的完整性;
2)加快数据库的操作速度
3) 在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) ACCESS自动按主键值的顺序显示表中的记录。
如果没有定义主键,则按输入记录的顺序显示表中的记录。
外键:
外键(Foreign Key)
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。
由此可见,外键表示了两个关系之间的联系。
以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
外键又称作外关键字。
换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R 的外键,通常在数据库设计中缩写为FK。
外键的作用
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。
使两张表形成关联,外键只能引用外表中的列的值或使用空值。
关于数据库主键和外键
关于数据库主键和外键一、什么是主键、外键关系型数据库中的一条记录中有若干个属性若其中某一个属性组(注意是组)能唯一标识一条记录该属性组就可以成为一个主键比如学生表(学号姓名性别班级) ,其中每个学生的学号是唯一的,学号就是一个主键,课程表(课程编号,课程名,学分) 。
其中课程编号是唯一的,课程编号就是一个主键。
成绩表(学号,课程号,成绩) 。
成绩表中单一一个属性无法唯一标识一条记录学号和课程号的组合才可以唯一标识一条记录所以学号和课程号的属性组是一个主键。
成绩表中的学号不是成绩表的主键但它和学生表中的学号相对应。
并且学生表中的学号是学生表的主键则称成绩表中的学号是学生表的外键。
同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性。
总结一下1.主键是能确定一条记录的唯一标识比如一条记录包括身份正号姓名年龄。
身份证号是唯一能确定你这个人的其他都可能有重复所以身份证号是主键。
2.外键用于与另一张表的关联。
是能确定另一张表记录的字段用于保持数据的一致性。
比如A表中的一个字段是B表的主键那他就可以是A表的外键。
二、主键、外键和索引的区别主键、外键和索引的区别?主键外键索引定义:唯一标识一条记录,不能有重复的,不允许为空表的外键是另一表的主键,外键可以有重复的,可以是空值该字段没有重复值,但可以有一个空值。
作用:用来保证数据完整性用来和其他表建立联系用的是提高查询排序的速度。
个数:主键只能有一个一个表可以有多个外键一个表可以有多个惟一索引。
聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
主键如何与其他表建立关联?
主键如何与其他表建立关联?一、什么是主键?主键是一种用于唯一标识数据表中每一条记录的字段。
它具有唯一性、非空性和稳定性的特征,用于保证数据表中每一行的唯一性和数据的完整性。
主键一般与其他表建立关联,用于建立数据表之间的链接。
二、主键与外键的区别主键和外键是数据库中两个重要的概念,虽然两者都是用于建立表与表之间的关联关系,但有着本质的区别。
1. 主键是唯一标识数据表中每一行记录的字段,而外键是用于与其他表建立关联的字段。
2. 主键是保证数据表的完整性和唯一性的基础,而外键是建立表之间关联的桥梁。
3. 主键可以是表中的任意字段,但外键必须是其他表中的主键字段。
三、建立主键与外键的步骤建立主键与外键的过程相对简单,下面是具体步骤。
1. 确定主键字段:在设计数据表时,需要选择一个或多个字段作为主键字段,并为其添加主键约束。
2. 建立外键关系:在需要与其他表建立关联的字段中,选择外键字段,并为其添加外键约束。
3. 创建关联:通过关联主键和外键字段,建立表与表之间的关联关系。
四、主键与外键的作用主键与外键在数据库中起到了重要的作用。
1. 实现数据表之间的关联:通过主键与外键,可以实现不同数据表之间的链接与关联,方便进行跨表查询和数据操作。
2. 确保数据完整性和一致性:主键保证数据表中每一行的唯一性和完整性,外键保证了数据表之间的一致性。
3. 提高查询效率:通过合理使用主键和外键,可以提高数据库的查询效率,减少数据冗余。
五、常见问题与解决方案在建立主键和外键关系时,可能会遇到一些问题,下面是一些常见问题及解决方案。
1. 主键冲突:当插入一条记录时,如果主键发生冲突,应该如何处理?可以选择使用自增主键,或者重新设计主键字段。
2. 外键引用异常:当删除或修改主表中的主键值时,会导致外键引用异常,应该如何处理?可以选择级联操作,或者手动处理外键引用关系。
3. 外键约束限制:外键约束会限制插入和更新操作,如何处理?可以选择暂时关闭外键约束,或者预先确保关联表中存在对应的主键值。
主键和外键有什么区别?
主键和外键有什么区别?一、主键的定义及作用1. 主键是指在关系数据库表中,用来唯一标识一个记录的字段或字段组合。
- 主键可以是单个字段,也可以是多个字段的组合,其目的是为了确保表中每条记录都具有唯一性。
- 主键可以用来与其他表建立关联关系。
2. 主键具有以下作用:- 主键保证了表中每条记录的唯一性,避免了数据冗余和重复。
- 主键是用来在表之间建立关联关系的重要依据。
二、外键的定义及作用1. 外键是指关系数据库表中的一个字段,它与其他表的主键建立了关联关系。
- 外键字段的值指向其他表的主键值,用来确保数据的完整性和一致性。
- 外键可以用来建立表与表之间的关系,实现数据的连接查询。
2. 外键具有以下作用:- 外键保证了表与表之间的数据完整性和一致性,避免了数据的不一致和错误。
- 外键可以用来进行表之间的连接查询,方便了数据的获取和分析。
三、主键与外键的区别1. 唯一性:- 主键具有唯一性约束,确保了表中每条记录的唯一性。
- 外键是引用其他表的主键,用来建立关联关系,不要求唯一性。
2. 数据完整性:- 主键用来保证表中记录的完整性和一致性。
- 外键用来保证表与表之间的数据完整性和一致性。
3. 查询功能:- 主键可以用来作为查询的条件或连接表之间的关键字段。
- 外键可以用来进行表之间的连接查询,方便了数据的获取和分析。
4. 数据类型:- 主键可以是任意数据类型。
- 外键的数据类型必须与被引用表的主键数据类型一致。
总结:主键和外键在关系数据库中扮演着不同的角色。
主键是用来唯一标识一个记录的字段,保证了表中每条记录的唯一性;外键是与其他表的主键建立关联关系的字段,用来保证表与表之间数据的完整性和一致性。
主键和外键在数据查询和建立关联关系方面具有不同的功能,但都可以通过在数据库中进行定义和约束来确保数据的准确性和一致性。
数据库主键与外键
数据库主键与外键数据库主键(Primary Key)和外键(Foreign Key)是关系型数据库中重要的概念。
它们被用于建立不同表之间的联系,确保数据的完整性和一致性。
本文将对主键与外键进行详细的介绍和说明。
一、主键(Primary Key)主键是一种用来唯一标识数据库表中每条记录的字段或字段组合。
通过定义主键,可以确保表中的每条记录都有唯一的标识,并且不允许为空。
常见的主键类型包括自增长整数、全局唯一标识符(GUID)、唯一索引等。
主键的作用主要有以下几个方面:1. 数据唯一性:主键的值在整个表中必须是唯一的,这样可以避免重复数据的插入和更新。
2. 快速查找:主键字段通常会被数据库系统自动索引,这样可以提高数据的查询效率。
3. 表之间的关系建立:主键可以被其他表的外键引用,从而建立表与表之间的关系,实现数据的关联查询和数据完整性的约束。
二、外键(Foreign Key)外键是用来建立表与表之间关系的字段,它用于保持关联表数据的一致性和完整性。
外键是关系型数据库中的一个重要特性,通过定义外键,可以将两个或多个表之间的关系表示出来。
外键的特点如下:1. 关联两个表:外键建立在一个表中,引用另一个表的主键或唯一索引。
这样就实现了表与表之间的关联。
2. 数据完整性:外键关联了两个表,可以保持数据的一致性和完整性。
当主表中的数据发生改变时,从表中引用该主表数据的外键也将相应更新或删除。
3. 约束性:外键可以约束数据的插入和更新操作,避免不符合表关系的数据被插入。
通过使用外键,可以实现以下几个方面的功能:1. 查询关联数据:使用外键可以方便地查询和检索两个表之间相关联的数据。
2. 数据一致性:外键可以保持关联表数据的一致性,确保表之间的数据完整和正确。
3. 级联操作:通过设置外键的级联操作规则,可以自动更新或删除相关联表中的数据。
总结:主键和外键是关系型数据库中重要的概念,它们建立表与表之间的关联,确保数据的完整性和一致性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
首先,为了能在OrderDetail的OrderID字段中添入正确的值,必须先更新Order表以获取到系统为其分配的OrderID值,然后再用这个OrderID填充OrderDetail表。最后更新OderDetail表。但是,为了确保数据的一致性,Order与OrderDetail在更新时必须在事务保护下同时进行,即确保两表同时更行成功。显然它们是相互矛盾的。
常见的数据库主键选取方式有:
? 自动增长字段
? 手动增长字段
? UniqueIdentifier
? “COMB(Combine)”类型
1自动增长型字段很多数据库设计者喜欢使用自动增长型字段,因为它使用简单。自动增长型字段允许我们在向数据库添加数据时,不考虑主键的取值,记录插入后,数据库系统会自动为其分配一个值,确保绝对不会出现重复。如果使用SQL
主键:
关系数据库依赖于主键---它是数据库物理模式的基石。主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:
1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
Server数据库的话,我们还可以在记录插入后使用@@Identity全局变量获取系统分配的主键键值。
尽管自动增长型字段会省掉我们很多繁琐的工,但使用它也存在潜在的问题,那就是在数据缓冲模式下,很难预先填写主键与外键的值。
假设有两张表:
Order(OrderID, OrderDate)
2. 主键应该是单列的,以便提高连接和筛选操作的效率。
注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然而这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。
上机记录表(卡号,学号,姓名、序列号)
上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键
上机记录表中的序列号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键
3使用UniqueIdentifierSQL Server为我们提供了UniqueIdentifier数据类型,并提供了一个生成函数NEWID(
),使用NEWID(
)可以生成一个唯一的UniqueIdentifier。UniqueIdentifier在数据库中占用16个字节,出现重复的概率非常小,以至于可以认为是0。我们经常从注册表中看到类似
Guid u =System.Guid.NewGuid();
对于上面提到的Order与OrderDetail的程序,如果选用UniqueIdentifier作为主键的话,我们完全可以避免上面提到的增加网络RoundTrip的问题。通过程序直接生成GUID填充主键,不用考虑是否会出现重复。
UniqueIdentifier字段也存在严重的缺陷:首先,它的长度是16字节,是整数的4倍长,会占用大量存储空间。更为严重的是,UniqueIdentifier的生成毫无规律可言,要想在上面建立索引(绝大多数数据库在主键上都有索引)是一个非常耗时的操作。有人做过实验,插入同样的数据量,使用UniqueIdentifier型数据做主键要比使用Integer型数据慢,所以,出于效率考虑,尽可能避免使用UniqueIdentifier型数据库作为主键键值。
一、什么是主键、外键:
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 :
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键
用户表(用户名、密码、登录级别)
其中用户名是唯一的, 用户名就是一个主键
使用手动增长型字段作为主键在进行数据库间数据复制时,可以确保数据合并过程中不会出现键值冲突,只要我们为不同的数据库分配不同的主键取值段就行了。但是,使用手动增长型字段会增加网络的RoundTrip,我们必须通过增加一次数据库访问来获取当前主键键值,这会增加网络和数据库的负载,当处于一个低速或断开的网络环境中时,这种做法会有很大的弊端。同时,手工维护主键还要考虑并发冲突等种种因素,这更会增加系统的复杂程度。
{45F0EB02-0727-4F2E-AAB5-E8AEDEE0CEC5}
的东西实际上就是一个UniqueIdentifier,Windows用它来做COM组件以及接口的标识,防止出现重复。在.NET里管UniqueIdentifier称之为GUID(Global
Unique Identifier)。在C#中可以使用如下命令生成一个GUID:
OrderDetial(OrderID, LineNum, ProductID, Price)
Order表中的OrderID是自动增长型的字段。现在需要我们录入一张订单,包括在Order表中插入一条记录以及在OrderDetail表中插入若干条记录。因为Order表中的OrderID是自动增长型的字段,那么我们在记录正式插入到数据库之前无法事先得知它的取值,只有在更新后才能知道数据库为它分配的是什么值。这会造成以下矛盾发生:
除此之外,当我们需要在多个数据库间进行数据的复制时(SQL
Server的数据分发、订阅机制允许我们进行库间的数据复制操作),自动增长型字段可能造成数据合并时的主键冲突。设想一个数据库中的Order表向另一个库中的Order表复制数据库时,OrderID到底该不该自动增长呢?
允许我们在DataSet中将某一个字段设置为自动增长型字段,但千万记住,这个自动增长字段仅仅是个占位符而已,当数据库进行更新时,数据库生成的值会自动取代分配的值。所以为了防止用户产生误解,建议大家将中的自动增长初始值以及增量都设置成-1。此外,在中,我们可以为两张表建立DataRelation,这样存在级联关系的两张表更新时,一张表更新后另外一张表对应键的值也会自动发生变化,这会大大减少了我们对存在级联关系的两表间更新时自动增长型字段带来的麻烦。
一个表可以有多个外键 一个表可以有多个惟一索引
聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则
主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
3.
永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。
注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。
4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
二、 主键、外键 和索引的区别