做网站推广的技巧,凤岗网站仿做,沧州seo,广州建设交易中心网站首页表的外键
3.5.1表之间的三种关系 在数据库设计中#xff0c;工作中经常会分析商业逻辑中的表的设计。在设计表的关系之前#xff0c;需要先了解关系型数据库特点。关系数据库有如下特点#xff1a; 关系型数据库采用了关系模型来组织数据的数据库。 关系型数据库的最大特点…表的外键
3.5.1表之间的三种关系 在数据库设计中工作中经常会分析商业逻辑中的表的设计。在设计表的关系之前需要先了解关系型数据库特点。关系数据库有如下特点 关系型数据库采用了关系模型来组织数据的数据库。 关系型数据库的最大特点就是事务的一致性 关系模型指的就是二维表格模型而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 在现实业务分析中理解为每个表和表之间是有联系的这种联系包括 1.一对1关系 2.一对多关系 3.多对多关系 一对一关系如球队与球队地址之间的关系一支球队仅有一个地址而一个地址也仅有一支球队。在数据库实际应用中两张表之间是一对一关系 一般用到的是主键关联。两个表之间有相同的字段有相同的主键如果字段不多的情况下可以设计成一个表。 一对多是最普遍的映射关系比如球员与球队的关系。从球队角度来说一个球队有多个球员即为一对多。一对多的关系在数据库用主从表来体现。 主表有一条数据从表有多条数据。“一”的那一端是父表“多”的那一端是子表。 多对多关系也很常见例如学生与选修课之间的关系一个学生可以选择多门选修课而每个选修课又可以被多名学生所选择。 数据库中的多对多关联关系一般需采用中间表的方式处理将多对多转化为两个一对多。 3.5.2外键的应用 根据商业逻辑分析出两个表的关系是一对多的关系父表设置一个主键子表设置一个外键外键与主键相关联。 外键是用于建立和加强两个表数据之间的链接的一列或多列。通过保存主表中主键值的一列或多列添加到另一个表中这个列就成为第二个表的外键。 建立外键的格式如下 create table 表名 (字段列表 constraint 外键约束名 foreign key( 子表组成外键的字段 ) references 父表名称 ( 父表组成外键的字段 ) )
【例3-7】建立民族表和职工表民族表包括民族名称职工表包括职工编号、姓名、民族名称。往民族表插入数据包括汉族、满族、回族、然后往职工表中插入数据汉族、满族、回族。往子表插入苗族测试是否成功。把子表姓名为张海的民族名称修改为布依族 测试是否成功。 分析两个表之间的关系。一个民族有很多职工一个职工只有一个民族所以民族表是父表职工表是子表需要在子表上建立外键。具体代码如下
–第3章\ bdgl.sql
–建立父表和子表 create table minzu (mincheng varchar2(2) primary key);
create table man ( Bianhao varchar2(30) name varchar2(10) minzu varchar2(10) constraint fk_minzu foreign key(minzu) references minzu(mincheng));
—父表插入数据 insert into minzu values(‘汉’); insert into minzu values(‘满’); insert into minzu values(‘回’); Commit; –子表插入数据 insert into man values(‘001’‘张海’‘汉’); insert into man values(‘002’‘孙清’‘满’); insert into man values (‘003’‘王光耀’‘回’); Commit;
查询主表数据如图3-11所示。
图3-11查询民族表数据 查询子表数据如图3-12所示。
图3-12查询职工表数据 往子表插入苗族 代码如下 insert into man values (‘004’‘刘海波’‘苗’); Commit;
执行后会出现错误提示如图3-13所示。
图3-13违反完整约束条件
会提示违法约束条件因为父表中没有苗族。结论子表插入的纪录必须满足外键约束在父表对应字段有相应的值。 更新子表数据把姓名为张海的民族名称修改为布依族代码如下 Update man set minzu‘布衣族’ where name‘张海’; 执行后仍然会提示违法约束条件。因为子表更新的纪录必须满足外键约束在父表对应字段有相应值。 删除主表的数据代码如下 delete from minzu where mincheng ‘满’; 执行后会出现违法约束条件提示。 结论直接删除主表的数据是不可以的需要先删除子表的数据再删除主表的数据具体代码如下 delete from man where minzu ‘满’; Commit; delete from minzu where mincheng ‘满’; Commit;
3.6多表查询 当查询的数据并不是来源一个表时需要使用多表连接操作完成查询。多表连接查询通过表之间的关联字段一次查询出多个表的数据。 3.6.1等值连接 等值连接也称为简单连接(Simple Joins)或者内连接(Inner Join)。通过等号来判断连接条件中的数据值是否相匹配具体格式如下 Select table1_name.fieldname table2_name.fieldname from table1_name table2_name Where 条件句
【例3-8】建立雇员表包括字段编号、姓名、岗位名称。建立职工薪水表包括职工号、姓名、工资。需要查询出编号、姓名、岗位名称、薪水信息。具体代码如下 –第3章\ bdgl.sql
建立雇员表
create table EMPLOYEE ( id_1 varchar2(20) name_1 varchar2(25) station varchar2(20) );
建立职工薪水表
create table SALARY ( id_2 varchar2(20) name_2 varchar2(25) salary NUMBER(82) );
――插入数据 insert into employee values(‘1’‘lily’‘工程师’); insert into employee values(‘3’‘lucy’‘项目经理’); insert into employee values(‘5’‘william’‘人事经理’); insert into employee values(‘6’‘demon’‘行政人员’); insert into employee values(‘7’‘david’‘人事专员’); Commit; insert into salary values(‘1’‘lily’5000); insert into salary values(‘2’‘tom’8000); insert into salary values(‘3’‘lucy’5500); insert into salary values(‘4’‘linda’3500); insert into salary values(‘5’‘william’6000); Commit;
select a.id_1a.name_1a.stationb.salary from employee asalary b where a.id_1b.id_2 ; –也可以使用关键字inner join select a.id_1a.name_1a.stationb.salary from employee a inner join salary b on a.id_1b.id_2 ;
查询结果如图3-14所示。
图3-14使用内连接的查询结果
从查询结果上可以看出查询了雇员表和薪水表中编号相同的数据。