• 范式、主外键


    一、范式

           1.第一范式:略

           2.第二范式:不存在部分依赖

                             关键字为“组合关键字”时,不能有非关键字属性部分依赖组合键

                             反例: (学号,科目号)  学分    分数
                                         由于“科目号——>学分”,有部分依赖的情况,故不符合第二范式

           3.第三范式:不存在传递依赖

                             不能有非主关键字传递依赖主关键字

                             反例:(科目号)   科目名      学分

                                        由于:“科目号——>科目名——>学分”,存在传递依赖的情况,故不符合第三范式

                                        注:一般只要有“非主属性X——>非主属性Y”的情况就不满足第三范式

    二、主外键

         1.添加主键

            a)为StaffInfo表设置主键

               

                 主键设置完成: 

                 

            b)为Tasks表设置联合主键

               同时选中其中的两个列名:

                

               联合主键设置完成:

                

         2.添加外键

               

                 打开“表和列规范”进行设置

               

                 设置“主表中的列”和“从表中的列”的对应关系:

               

                外键设置完成之后,就可从“数据库关系图”中看到各个表之间的关系:

               

         3.主表与从表数据的插入与删除

             主表中原始数据如下:

            

             从表中原始数据如下:

            

             a)在从表中插入行

                   1)主表中有外键列对应的值

    1 use edisondb;
    2  insert into Tasks(staffid,projectid,useddays)
    3  values
    4 (5001,1002,30);

                      执行结果为:

                     

                      此时,Tasks表中的数据为:

                     

                   2)主表中无外键列对应的值

    1 use edisondb;
    2  insert into Tasks(staffid,projectid,useddays)
    3  values
    4 (5009,1003,30);

                       执行结果为:


             b)在主表中删除行

                   1)从表中外键列有对应的值

    1 use edisondb;
    2  delete from StaffInfo
    3  where staffid=5001;

                       执行结果为:

     注:之所以会出现上面删除失败,是因为Sql Server默认情况下是不支持“级联删除”的(05中称为“层叠删除”);

           为了能“级联删除”,需要进行如下设置:(将删除规则由“无操作”改为“层叠”)

          

            保存设置之后,执行如下语句:

    1 use edisondb;
    2  delete from StaffInfo
    3 where staffid=5001;

            执行结果为:

           

            此时StaffInfo表中的数据为:

           

            Tasks表中的数据为:

           

                   2)从表中外键列无对应的值

             执行如下语句:

    1use edisondb;
    2delete from StaffInfo
    3where staffid=5002;

            执行结果为:

           

            此时,StaffInfo表中的内容为:

           

            注:当从主表中删除一行数据,且该行在从表外键列中没有对应数据时,无论是否设置了“级联删除”,该数据都可被成功删除。

  • 相关阅读:
    四则运算生成器
    学习进度总结
    大三寒假实习内容
    构建之法一二章读后感
    构建之法第三章读后感
    关于NopCommerce3.6版用户登录详解
    关于NopCommerce3.6版的@Html.Widget(“home_page_top”)的说明
    Java学习心得(2)
    Java学习心得(5)
    Java学习心得(6)
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2096786.html
Copyright © 2020-2023  润新知