精华内容
下载资源
问答
  • 关系模式的主键和外键
    千次阅读
    2021-07-07 17:11:31

    1.主键

    关系模式中用户正在使用的候选键称为主键(primary key)。
    一般,如不加说明,键是指主键。
    主键的取值不能缺失,也不能为空值(null)。

    2.外键

    在关系模式中,如果某属性值是其他模式的候选键,那么该属性集对模式R来说是外键。

    3.超键

    在关系模式中,能唯一标识元组的属性集称为超键。

    4.候选键

    如果一个属性集能唯一标识元组,且由不包含多余属性,那么这个属性集称为候选键。
    候选键是没有多余属性的超键。

    举例

    假设有如下两个表:
    学生(学号,姓名,性别,身份证号,教师编号)
    教师(教师编号,姓名,工资)
    超键:
    由超键的定义可知,学生表中含有学号或者身份证号的任意组合都为此表的超键。如:(学号)、(学号,姓名)、(身份证号,性别)等。
    候选键:
    候选键属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。学生表中的候选键为:(学号)、(身份证号)。
    主键:
    主键就是候选键里面的一个,是人为规定的,例如学生表中,我们通常会让“学号”做主键,教师表中让“教师编号”做主键。
    外键:
    外键比较简单,学生表中的外键就是“教师编号”。外键主要是用来描述两个表的关系。

    更多相关内容
  • 使用主键和外键的“多对多”数据库关系。 该项目的目标是为一个通用的国际非政府组织创建一个完整的全栈项目的初始后端。 我们选择了亚洲,并将该非政府组织指定为亚洲非政府组织(ANGO)。 前端分为两个部分,即...
  • 主要介绍了如何分清SQL数据库中的主键外键,这里简单介绍下,方便需要的朋友
  • 关系模型Relational_Model,主键Primary_Key,外键Foreign_Key【关系数据库SQL教程2】
  • 关系模型 表的每一行称为记录(Record),记录是一个逻辑意义上的数据。 表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。...在关系数据库中,关系是通过主键和外键来维护

    关系模型

    表的每一行称为记录(Record),记录是一个逻辑意义上的数据。

    表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。

    段定义了数据类型(整型、浮点型、字符串、日期等)。NULL是空的,不是0也不是空字符串

    关系数据库的表和表之间需要建立“一对多”,“多对一”和“一对一”的关系,这样才能够按照应用程序的逻辑来组织和存储数据。

    一对多:一个表里的一行数据对应另一个表里的多行数据

    一对一:一个表里的一行数据对应另一个表里的一行数据

    在关系数据库中,关系是通过主键和外键来维护的。

    主键

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

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

    外键

    在students表中,通过class_id的字段,可以把数据与另一张表关联起来,这种列称为外键。
    外键并不是通过列名实现的,而是通过定义外键约束实现的:
    1 定义外键约束

    ALTER TABLE students  (更改表格)
    ADD CONSTRAINT fk_class_id (添加外键约束)
    FOREIGN KEY (class_id) (外键)          
    REFERENCES classes (id);(关联)
    

    2 要删除一个外键约束,也是通过ALTER TABLE实现的:

    ALTER TABLE students(修改表)
    DROP FOREIGN KEY fk_class_id;   (删除外键)
    

    关系数据库通过外键可以实现一对多、多对多和一对一的关系。外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。

    索引

    在关系数据库中,如果有上万甚至上亿条记录,在查找记录的时候,想要获得非常快的速度,就需要使用索引。

    索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。
    1 创建索引,索引如果有多列,可以在括号里依次写上,用逗号隔开

    ALTER TABLE students(更改表格)
    ADD INDEX idx_score (添加索引)
    ADD INDEX idx_name_score (name, score);(添加多列索引)
    

    2 添加唯一索引

    ALTER TABLE students(更改表格)
    ADD CONSTRAINT uni_name UNIQUE (name); (添加唯一索引)
    

    3 也可以只对某一列添加一个唯一约束而不创建唯一索引:

    ALTER TABLE students (更改表格)
    ADD CONSTRAINT uni_name UNIQUE (name); (添加唯一索引)
    

    通过对数据库表创建索引,可以提高查询速度。

    通过创建唯一索引,可以保证某一列的值具有唯一性。

    数据库索引对于用户和应用程序来说都是透明的。

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

    千次阅读 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、含有外键的表叫外键表,外键字段来自的呢一张表叫做主键表
    问题:先删除主键表还是外键表?
    答:先删除外键表
    如果先删除主键表会报错,因为这会导致外键表中的数据引用失败

    展开全文
  • 关于关系型数据库基本知识(主键外键、一对一、一对多、多对一等),适合了解数据库最基本知识的初学者阅读
  • 关系模型——主键外键、索引

    千次阅读 2020-12-16 17:54:08
    联合主键关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键 ;对于联合主键,允许一列有重复,只要不是所有主键链均重复即可 test id_num id_type ...

    主键

    主键:唯一识别字段

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

    基本选取原则:选择与业务无关的字段,命名id

    id字段常用类型:

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

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

    联合主键:关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键 ;对于联合主键,允许一列有重复,只要不是所有主键链均重复即可

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

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

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

     外键

    idnameother columns...
    1

    1班

    ......

    22班......
    idclass_idname

    other columns...

    11小明......
    22小红......

     

    外键:在students表中,通过class_id这一字段,将数据与另一张表关联起来,此时这个class_id,称之为外键

    注!外键并不是通过列名实现的,而是通过定义外键约束实现的

    其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表的主键)

    ALTER TABLE students
    ADD CONSTRAINT fk_class_id
    FOREIGN KEY (class_id)
    REFERENCES classes (id);

    删除外键约束:

    注!删除外键约束并没有删除外键这一列。删除列是通过DROP COLUMN ...实现的。

    ALTER TABLE students
    DROP FOREIGN KEY fk_class_id;

    多对多:

    通过一个表的外键关联到另一个表,我们可以定义出一对多关系。多对多”关系。就是通过两个一对多关系实现的,即通过一个中间表,关联两个一对多关系,就形成了多对多关系。例如,一个老师可以对应多个班级,一个班级也可以对应多个老师,因此,班级表和老师表存在多对多关系

    多对多实际上是俩个一对多关系实现的,通过中间表,关联俩个一对多的关系,行成了多对多的关系。

    teachers

    id

    name
    1张老师
    2赵老师
    3王老师
    4李老师

     

    class
    idname
    1

    一班

    2二班

     

    teacher_class中间表
    idteacher_idclass_id
    111
    212
    321
    422
    531
    642

     

    通过中间表teacher_class,可知班级表class与老师表teachers之间的关系

    • id=1的张老师对应id=1,2的一班和二班
    • id=2的王老师对应id=1,2的一班和二班
    • id=3的李老师对应id=1的一班
    • id=4的赵老师对应id=2的二班

    同理,class到teachers的关系:

    • id=1的一班对应id=1,2,3的张老师、王老师和李老师
    • id=2的二班对应id=1,2,4的张老师、王老师和赵老师

    一对一:

    一个表的记录对应到另一张表的唯一记录

    索引

    关系数据库中,对某一列或多个列的值进行预排序的数据结构,通过使用索引,可以让数据库系统不用扫描整个表,而是直接定位到符合条件的记录,加快查询速度。

    创建索引:ADD INDEX

    索引的效率取决于索引列的值是否相同,即该列的值越不相同,那么索引效率越高。

    对于主键,关系型数据库会自动创建主键索引,因为主键是唯一的,所以使用主键效率最高

    ALTER TABLE students
    ADD INDEX idx_score(score);
    使用ADD INDEX idx_score (score)就创建了一个名称为idx_score,使用列score的索引。
    索引名称是任意的,索引如果有多列,可以在括号里依次写上
    ALTER TABLE students
    ADD INDEX idx_score(name,score);
    

    索引优缺点:

    优点:提高查询效率

    缺点:在增、删、改时,需要同时修改索引,因此,索引越多,增、删、改速度越慢

    唯一索引:

    在设计关系数据表的时候,看上去唯一的列,例如身份证号、邮箱地址等,因为他们具有业务含义,因此不宜作为主键。

    但是,这些列根据业务要求,又具有唯一性约束:即不能出现两条记录存储了同一个身份证号。这个时候,就可以给该列添加一个唯一索引。例如,我们假设students表的name不能重复:

    ALTER TABLE students
    ADD UNIQUE INDEX uni_name (name);
    
    通过UNIQUE关键字我们就添加了一个唯一索引。
    也可以只对某一列添加一个唯一约束而不创建唯一索引。
    
    ALTER TABLE students
    ADD CONSTRAINT uni_name UNIQUE (name);

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 文章导读: 在后面跟其他数据库做对比的时候,这个是其中一个点...本文解决问题:主键外键的纠葛 先来看看主键外键的来源吧: 1、主键约束( PRIMARY KEY): (1)唯一标识数据库表中的每条记录; (2)主键必须...
  • mysql数据库建模设计 软件开发的步骤可大致分为: 需求分析 系统设计 编码实现 系统测试 运行维护 ...​ 实体-关系图(Entity Relationship Diagram),也称为E-R图,提供了表示实体、属性和关系的方法...
  • 关于数据库主键和外键(终于弄懂啦)

    万次阅读 多人点赞 2019-06-18 15:59:59
    转 关于数据库主键和外键(终于弄懂啦) 2018年07月16日 19:44:24 f45056231p 阅读数 19385 ...
  • 数据库中的主键和外键关系

    千次阅读 2019-09-23 11:28:15
    主键外键关系,聚个简单的例子: 1学生表 (学号,姓名,性别,班级) ; 其中每个学生的学号是唯一的,学号就是一个主键 2课程表 (课程编号,课程名,学分) ; 其中课程编号是唯一的,课程编号就是一个主键 3...
  • 主键和外键的作用

    2021-04-07 08:18:32
    主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能可用性都有着决定性的影响。 必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个...
  • 阅读以下说明图,回答问题1至问题4。【说明】某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩考试成绩,其主要功能描述如下:1.每门课程都有3到6个单元构成,每个单元结束后会进行一次...
  • SQL的主键和外键约束

    2020-01-07 18:14:12
    SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以...
  • 外键就是一个字段在A表B表都有,那么这个字段就可以作为外键。举例之: 学生表:学号,姓名,性别,课程。这里学号就是主键。给你一个学号,就可以找到一条学生记录。 课程表:课程编号,课程名称,学分。这里...
  • 什么是主键和外键

    万次阅读 多人点赞 2018-07-02 09:06:59
    一、什么是主键外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一...
  • 数据库中的主键外键关系,通俗易懂

    万次阅读 多人点赞 2017-12-16 16:13:08
    一、什么是主键外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,...
  • mysql什么是主键和外键

    千次阅读 2021-06-23 10:12:06
    一、什么是主键外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一...
  • 主键和外键的区别

    千次阅读 2018-06-29 21:31:32
    一、什么是主键外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一...
  • 参考文章: 廖雪峰SQL教程 关系模型 https://www.liaoxuefeng.com/wiki/1177760294764384/1218728991649984
  • 二、 主键外键和索引的区别 主键外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是...
  • 关系数据库依赖于主键—它是数据库物理模式的基石。 唯一性:一个数据表只能有一个主键 标识性:一个数据表的所有记录都具有不同的主键取值 非空性:不能为空 人为的选取某个候选码为主码 作为一个可以被外键...
  • 关于数据库主键和外键,索引

    千次阅读 2018-06-28 18:18:29
    一、什么是主键外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是...
  • MySQL主键外键

    千次阅读 2021-01-19 05:46:35
    定义主键和外键主要是为了维护关系数据库的完整性,总结一下:1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是...
  • 怎么分辨数据库的主键和外键

    千次阅读 2018-05-10 17:35:00
    二、 主键外键和索引的区别  主键外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的...
  • 关于数据库主键和外键的作用与区别

    万次阅读 多人点赞 2017-05-09 10:35:52
    一、什么是主键外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如  学生表(学号,姓名,性别,班级)  其中每个学生的...
  • 主键,外键和索引的区别(详细)

    万次阅读 多人点赞 2018-10-19 13:48:19
    一、什么是主键外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如  学生表(学号,姓名,性别,班级)  其中每个学生的学号...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,140
精华内容 15,656
关键字:

关系模式的主键和外键