数据库多表关联如何设计

数据库多表关联如何设计,第1张

你用用户表和管理员表

关联有什么意义么?

表之间的关联是表示表之间的关系

比如

你有个用户分类表

在用户表中有个用户类型

这个时候在用户类型字段

你就可以存放用户分类的一个编号

注意:在这里这个编号只要是唯一的就可以啊,见得一定得是自动编号的

再打个比方说

一个员工表

记录员工的基本信息

一个工资表

记录员工的工资

这个时候在工资表中的员工信息部分完全可以只村一个员工编号姓名可以重复

但是编号不会

在每个表中的这个唯一的字段

称为“关键字”

当然也可以是几个字段的组合

比如员工有两个叫张

一个男的一个女的

我们在数据库查询的时候完全可以用

姓名='张'

and

性别='男'

这样来查询到那个男的张

当然就像是上面说的

这个员工还有个唯一的编号

这个时候可以用

编号=12345

这样的来查询到

方法如下:

1、打开Microsoft Office Visio 2007,左侧的模板类别中选择“软件和数据库”,双击右侧的“数据库模型图”;

2、调整显示比例;

3、添加实体:鼠标指针移动到实体上,按下鼠标左键不要松开,移动鼠标到右侧的绘图页上,松开鼠标左键;

4、修改实体定义:去掉键入时同步的勾,输入物理名称和概念名称;

5、添加列:左侧类别选择“列”,右侧输入列名,选择数据类型,选择是否必须,是否主键。相同的方法添加“用户与角色关联表”;

6、添加关联关系:在左侧的关系上按下鼠标左键,拖动到右侧的“用户表”实体上,实体边框会变成红色,松开鼠标左键;

7、移动关系连接线的另一端关联到另一个实体上。左侧的数据库属性中就会显示对象关系。按此方法创建其它实体和关系;

8、保存文件:实体关系图设计好之后就可以保存了,为了以后可以继续修改,一定要保存为vsd扩展名,如果为了方便查看,可以再另存为其它格式。

9、最终效果:

一、数据库的多表连接查询,inner的不同用法

在pg数据库中建立两张表:

t_a和t_b如下所示:

t_a:

t_b:

1、inner join(内连接)

inner join就是根据on字段标示出来的条件,查询关联的表中符合条件的数据,并把他前部都显示出来,形成一个结果集。

执行如下语句

select from t_a inner join t_b on t_aadi=t_bbid

得到的结果为:

这样的查询会显示出所有的数据,如果我们仅仅需要一部分的数据(例如我们只想查出t_a中所有aid和t_b中的bid相同的数据),那么查询语句应该变成:

select t_a from t_a inner join t_b on t_aaid=t_bbid

那么得到的数据如下所示,就只显示了t_a表中的数据。如下:

要排除重复的数据,在select后加distinct即可。

2、left join

left join 就是以表t_a为基础从右表t_b中查询出所有符合on条件的结果,在合并到表t_a中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_a中的所有数据。

执行如下查询语句:

select from t_a left join t_b on t_aaid=t_bbid

得到如下结果:

可以看到,在查询的结果中,有一行关于表t_b的数据都为null,因为表t_b中没有符合on条件的数据。但是表t_a表显示出了全部的数据。那么在需要筛选的时候,应该着重于筛选表t_b中的数据,如果执行如下的语句:

select t_a from t_a left join t_b on t_aaid=t_bbid

那么得到的就是表t_a中的所有数据,那么这个查询就显得没有意义了。

3、right join

right join 就是以表t_b为基础从左表t_a中查询出所有符合on条件的结果,在合并到表t_b中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_b中的所有数据。

执行如下查询语句:

select from t_a right join t_b on t_aaid=t_bbid

得到的结果为:

可以看到,查询的结果中,有两行数据在表t_a的对应部分都是null的,表示表t_a中没有符合on条件的数据,但是表t_b显示了全部的数据,那么需要做条件筛选的时候,我们就应该主要针对表t_a进行筛选。

二、查询一个父级的所有子级(包括子级的子级)

在pg数据库中建立一张表t_c如下:

要查出cid为1的所有的子级、包括cid为2、3、5的子级的集合。执行以下sql语句

with recursive tb as(select from t_c where parent_id='1' union all select t_c from t_c,tb where t_cparent_id=tbcid )select from tb

得到如下的结果:

由查询出的结果集可以看到,我们查询出了除了父级(cid为1)以外的所有cid为父级的子级以及子级的子级。

我们来解析一下这个sql语句:

显而易见的,这是一个递归的查询方法。首先是with为查询语句提供了辅助功能,可以看做是查询语句中的临时表,其次recursive是sql中递归的关键字,只有有了这个关键字,pg才知道with这个语句需要做递归 *** 作。union all是去重的,t_cparent_id=tbcid 表示了t_c的parent_id要等于临时表tb的cid要在整个with语句的外面查询建立的临时表tb,才能得到所有的子级的集合。

数据库多表关联,一般采用外键比较方便,也可以额外建一个连接表做多表关联的连接,但这样稍微有点儿复杂,这些是建表方面的关联。查询关联,可以采用多表查询的方式关联查询,这点要求稍高点儿,但关联后再 *** 作单表时,别的表不用受太大的影响,这点特好。

可以关联两个表,或更多表。

关联可以减少数据的重复存储,保证数据的正确性。

保证数据的正确(完整性)是很重要的。

关联可以防止更新数据时,破坏数据的完整性。

比如当价格表和销售表不关联到商品表时,

商品名称变更时需要修改三张表,如果一时疏忽可能遗漏某个表的更新处理。

以上就是关于数据库多表关联如何设计全部的内容,包括:数据库多表关联如何设计、数据库字段关联表怎么画、pg数据库的db怎么查看表关联等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9681208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存