多表的设计原理,如何设计表与表之间的关系

在开发中,一个项目的数据,会保存在一个数据库中,但是不同的数据保存在不同的表中,不同的表,表与表之间有不同的关系。
有,一对多的对应关系、一对多(多对一)、一对一。
1、外键约束是什么、有什么作用
外键约束:一个表a, a c 引入另一张表b的b c的字段,那么可以把a表中的a c 字段设置成外键约束。
建表之后添加外键约束:
   alter table 表名 add foreign key(字段名) references 要引入的表名(对应的字段或者被引用表的列名)
建表的时候添加外键约束
  向employee表中加入一条数据,并且depid 是1;此时employee表中的depid内容,一定在dept表中的detpid存在。
主表:被引用的 表
从表:引用的表
如果删除主表的数据,该数据被从表引用了,那么该条不能被删除。
作用:保持数据的完整性和有效以性。
2、多表怎么查询的、有什么查询方法
多表查询的问题:笛卡尔积问题,把多个表放在一起,同时去查询的时候,会得到一个结果,而且这个结果不是我们想要的数据,这个结果成为笛卡尔积。这个结果没有意义的。
想得到正确的数据,需要添加过滤条件。
例如:有A和B这两张表,我想得正确的数据,需要添加过滤条件。
   select * from a,b where a.a_id=b.b_bid;
内连接查询:
隐士内连接查询:select *from 表名1,表名2 where 表名1.列名 = 表名2.列名;
select * from a.b where a.a_id = b.a_id;
显示内连接查询:select * from 表名 inner jojn 表名 on条件;
Select *from a inner join b on a.a_id = b.a_id; ;
;外连接查询:左外连接、右外连接、全连接、自连接。

左外连接:用左边的数据去右边表中查询对应的记录,不管是否找到,都将显示左边表中的所有数据。
语法:select * from 表1 left outrer join 表2 on 条件;
Select * from a left outer join on a.a_id = b.a_id;
右外连接:用右边表去左边查询对应记录,不管是否找到,右边表的数据都会显示。
语法:select * from 表1 right outer jonin 表2 on 条件;
select *from a right outer join b on a.a_id = b.a_id;
全连接查询:左外连接和右连接的结果合并,会去掉重复的记录,
select*from 表1 full outer join 表2 on 条件;
select * from a full outer jojin b on a full outer join b on a.aid = b.a_id;
注意:mysql 数据库不支持这个语法。

Sql关联子查询:把一个sql的查询结果作为另外一个查询的参数的存在。
例如:查询价格最贵的水果名称
数据库中 A为水果表,B为价格表。、
1、在B表中查询出来最高价格:select(maxb_price)from B;
2、通过最高的价格,代对应的id : select a_id from b where b_price=(select max(b_price)from b);


3、一对一怎么设计
一对一关系表,在开发中使用的一般不多,其中也是两个实体;其中A实体中的数据,只能对应B实体中的一个数据;同时B实体中的数据也只能对应A实体中的一个数据。如:人和身份证对应关系。
注意:一对一关系,可以在任意一方的主键作为外键。
create table id_card(
c_id int primary key auto_increment,
address varchar(400)not null
);
insert into id_card values(1,'广东');
insert into id_card values(2,'上海');

create table people(
id int primary key auto_increment,
name varchar(255)not null
);
insert into people values(null,'小小');
insert into people values(null,'小红');
alter table people add foreign key(id) references id_card(id);



4、多对多怎么设计
多对多的关系,在项目开发中非常的常见的。比如:顾客和商品的关系。
外键:创建第三张表,两张表的主键添加外键,维护顾客和商品的 关系。
create table customer(
id int primary key auto_increment,
name varchar(300) not null
);
insert into customer values(null,'小小');
insert into customer values(null,'红红');
create table commodity(
id int primary key auto_increment,
name varchar(300) not null
);
insert into commodity values(null,'苹果');
insert into commodity values(null,'西瓜');

create table c_d(
id int primary key auto_increment,
c_id int not null ,
d_id int not null
);
alter table c_d  add foreign key(c_id) refernces customer(id);
alter table c_d add foreign key(d_id) refernces commodity(id);


5、一对多(多对一)怎么设计
其中也包括两个实体对象,A实体中的数据可以对应B实体中的多个数据;反而B实体中的多个数据只能对应A实体中的一个数据。
例如:作者和小说之间的关系,老师和课程的 关系等等。
在多方的一方添加一方的主键作为多方和一方的外键。
create table author(
id int primary key auto_increment,
name varchar(100) not null
);
insert into author values(null,'夏琳');
insert into author values(null,'琳琳');

create table novel(
id int primary key auto_increment,
name varchar(300) not null
);
insert into novel values(null,'书都不会读你还会干什么!');
insert into novel values(null,'java');
alter table novel add foreign key(id) references author(id);
发布了906 篇原创文章 · 获赞 9 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览