外键约束(foreign key,简称FK)

news/2025/3/20 21:43:48/

外键约束涉及到的相关术语:
        外键约束:一种约束(foreign key)
        外键字段:该字段上添加了外键约束
        外键值:外键字段当中的每一个值。


    业务背景:
        请设计数据库表,来描述“班级和学生”的信息?

        第一种方案:班级和学生存储在一张表中???
        t_student
        no(pk)            name        classno            classname
        ----------------------------------------------------------------------------------
        1                    jack             100                北京市大兴区亦庄镇第二中学高三1班
        2                    lucy            100                 北京市大兴区亦庄镇第二中学高三1班
        3                     lilei            100                 北京市大兴区亦庄镇第二中学高三1班
        4                    hanmeimei    100              北京市大兴区亦庄镇第二中学高三1班
        5                    zhangsan        101            北京市大兴区亦庄镇第二中学高三2班
        6                    lisi            101                   北京市大兴区亦庄镇第二中学高三2班
        7                    wangwu        101              北京市大兴区亦庄镇第二中学高三2班
        8                    zhaoliu        101               北京市大兴区亦庄镇第二中学高三2班
        分析以上方案的缺点:
            数据冗余,空间浪费!!!!
            这个设计是比较失败的!
        
        第二种方案:班级一张表、学生一张表??
        
        t_class 班级表
        classno(pk)            classname
        ------------------------------------------------------
        100                    北京市大兴区亦庄镇第二中学高三1班
        101                    北京市大兴区亦庄镇第二中学高三1班
    
        t_student 学生表
        no(pk)            name                cno(FK引用t_class这张表的classno)
        ----------------------------------------------------------------
        1                    jack                    100
        2                    lucy                    100
        3                    lilei                      100
        4                    hanmeimei          100
        5                    zhangsan            101
        6                    lisi                        101
        7                    wangwu              101
        8                    zhaoliu               101

        当cno字段没有任何约束的时候,可能会导致数据无效。可能出现一个102,但是102班级不存在。
        所以为了保证cno字段中的值都是100和101,需要给cno字段添加外键约束。
        那么:cno字段就是外键字段。cno字段中的每一个值都是外键值。

        注意:
            t_class是父表
            t_student是子表

            删除表的顺序?
                先删子,再删父。

            创建表的顺序?
                先创建父,再创建子。

            删除数据的顺序?
                先删子,再删父。

            插入数据的顺序?
                先插入父,再插入子。

        思考:子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗?
            不一定是主键,但至少具有unique约束。

        测试:外键可以为NULL吗?
            外键值可以为NULL。


http://www.ppmy.cn/news/486623.html

相关文章

前端开发中遇到的小bug--解决方案

1.在 searchBox 搜索栏中,用到了多级下拉框的筛选条件,样式如下: 这样看起来是没什么问题的,但当我选择时,在框中显示的内容和筛选条件的内容就出错了: 这里其实是选择了 采矿业 -- 石油和天然气开采业 &am…

AI大模型迈入应用时代,每日互动推动“可控大模型”落地

垂直行业更需要可控大模型 当下,大模型正在不断精进,以GPT-4、文心一言为代表的大模型(LLM)表现出了强大的逻辑推理能力,并能够很好地处理复杂任务,使得社会生产力得到了飞跃式提升。 面对大模型热度的持…

获取打印机状态,脱机或者在线

# 返回获取所有打印机名称信息 import win32print print_names [] printers win32print.EnumPrinters(2) for printer in printers:print_names.append(printer[2])def get_printer_status(device_nameNone):# 获取打印机状态 device_name打印机名称try:handle win32print.O…

AutoCAD语言包下载地址

​​​y​​​​​​​​​​​​​​AutoCAD 语言包 | AutoCAD 2021 | Autodesk Knowledge Network安装 AutoCAD 后,下载并安装 AutoCAD 语言包以采用您的首选语言运行 AutoCAD。 注意:自 2023 版起,直接从 Autodesk Account 下载语言包。 A…

解析完CAD安装包后,如何添加语言?手把手教你~

2021年,AutoCAD新增了中文支持,这对于外语不好的小伙伴可谓是久旱逢甘霖。由于语音包需要手动安装,很多小伙伴在解析完CAD安装包后对此是束手无策。今天就教你如何下载适用自己的语言产品并管理语言包。 1、下载其他语言版本的软件 登录到您…

CAD2020软件安装教程【搬运】

软件下载 [名称]:CAD2020 [大小]:1.97GB [语言]:简体中文 [安装环境]:Windows [64位下载链接]: https://pan.baidu.com/s/1To_R3UtsNmPZlYvzsmdnnQ [提取码]:kzn9 [备用链接]:在公众号…

cad2021安装教程附安装包下载-详细完整教程

下面给大家介绍的是cad2021安装教程及破解方法,具体操作步骤如下: 下载地址链接:https://pan.baidu.com/s/1z8IGpyIdrWyR5YZAQS3m6A?pwdavuo 提取码:avuo 1、打开下载好的CAD2021安装包进行解压,右击【CAD2021应用…

Python Anaconda创建虚拟环境及Pycharm使用虚拟环境

目录 前言 一、Anaconda与Pycharm 二、conda常用命令 三、Pycharm使用虚拟环境 总结 前言 我们在做开发任务时可能会创建多个项目,这些项目可能会依赖于不同的Python环境。比如有的用到Python3.6、有的用到Python3.7;有的用Pytorch开发、有的用Tens…