一、范式
1.第一范式:略
2.第二范式:不存在部分依赖
关键字为“组合关键字”时,不能有非关键字属性部分依赖于组合键
反例: (学号,科目号) 学分 分数
由于“科目号——>学分”,有部分依赖的情况,故不符合第二范式
3.第三范式:不存在传递依赖
不能有非主关键字传递依赖于主关键字
反例:(科目号) 科目名 学分
由于:“科目号——>科目名——>学分”,存在传递依赖的情况,故不符合第三范式
注:一般只要有“非主属性X——>非主属性Y”的情况就不满足第三范式
二、主外键
1.添加主键
a)为StaffInfo表设置主键
主键设置完成:
b)为Tasks表设置联合主键
同时选中其中的两个列名:
联合主键设置完成:
2.添加外键
打开“表和列规范”进行设置
设置“主表中的列”和“从表中的列”的对应关系:
外键设置完成之后,就可从“数据库关系图”中看到各个表之间的关系:
3.主表与从表数据的插入与删除
主表中原始数据如下:
从表中原始数据如下:
a)在从表中插入行
1)主表中有外键列对应的值
2 insert into Tasks(staffid,projectid,useddays)
3 values
4 (5001,1002,30);
执行结果为:
此时,Tasks表中的数据为:
2)主表中无外键列对应的值
2 insert into Tasks(staffid,projectid,useddays)
3 values
4 (5009,1003,30);
执行结果为:
b)在主表中删除行
1)从表中外键列有对应的值
2 delete from StaffInfo
3 where staffid=5001;
执行结果为:
注:之所以会出现上面删除失败,是因为Sql Server默认情况下是不支持“级联删除”的(05中称为“层叠删除”);
为了能“级联删除”,需要进行如下设置:(将删除规则由“无操作”改为“层叠”)
保存设置之后,执行如下语句:
2 delete from StaffInfo
3 where staffid=5001;
执行结果为:
此时StaffInfo表中的数据为:
Tasks表中的数据为:
2)从表中外键列无对应的值
执行如下语句:
2delete from StaffInfo
3where staffid=5002;
执行结果为:
此时,StaffInfo表中的内容为:
注:当从主表中删除一行数据,且该行在从表外键列中没有对应数据时,无论是否设置了“级联删除”,该数据都可被成功删除。