数据库关系 1对N N对1

数据库关系 1对N N对1,第1张

其实都是多对多:但也在数据库的关系设置,包含的数据。

一个学校有多名学生,一名学生只能在一个学校里。那么一个县里又是多个学校。

一个县有多个街道,同样的

如果从一个学校的学生创建关系,就是一对多。如果,从县级说,多个学校多名学生,就是多对多。

默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象。以Customer和Order类为例,假定ORDERS表的CUSTOMER_ID外键允许为null,图1列出了CUSTOMERS表和ORDERS表中的记录。以下Session的find()方法用于到数据库中检索所有的Customer对象:List customerLists=session.find("from Customer as c")运行以上find()方法时,Hibernate将先查询CUSTOMERS表中所有的记录,然后根据每条记录的ID,到ORDERS表中查询有参照关系的记录,Hibernate将依次执行以下select语句:select * from CUSTOMERS�0�2select * from ORDERS where CUSTOMER_ID=1select * from ORDERS where CUSTOMER_ID=2select * from ORDERS where CUSTOMER_ID=3select * from ORDERS where CUSTOMER_ID=4通过以上5条select语句,Hibernate最后加载了4个Customer对象和5个Order对象,在内存中形成了一幅关联的对象图,参见图2。Hibernate在检索与Customer关联的Order对象时,使用了默认的立即检索策略。这种检索策略存在两大不足:(1) select语句的数目太多,需要频繁的访问数据库,会影响检索性能。如果需要查询n个Customer对象,那么必须执行n+1次select查询语句。这就是经典的n+1次select查询问题。这种检索策略没有利用SQL的连接查询功能,例如以上5条select语句完全可以通过以下1条select语句来完成:select * from CUSTOMERS left outer join ORDERS�0�2on CUSTOMERS.ID=ORDERS.CUSTOMER_ID�0�2以上select语句使用了SQL的左外连接查询功能,能够在一条select语句中查询出CUSTOMERS表的所有记录,以及匹配的ORDERS表的记录。(2)在应用逻辑只需要访问Customer对象,而不需要访问Order对象的场合,加载Order对象完全是多余的 *** 作,这些多余的Order对象白白浪费了许多内存空间。为了解决以上问题,Hibernate提供了其他两种检索策略:延迟检索策略和迫切左外连接检索策略。

在数据库概念模型设计的时候,ER图是基本方法之百一,主要用来描述数据库中所涉及实体及实体与实体之间度的关系。实体间的关系通常有:1对1(1:1),1对多

(1:m),多对1(m:1),多对对(m:n)等。

比如有两个简单实体,分别是单位和职员,它们的关系就是1:m,一个单位可以有多问个职员;

再比如有两个实体,分别是学生答和图书,它们的关系就是m:n,从而形成中间表

学生借阅的图书,结果是1本图书可以被多人借阅,1个人也可以借多本图书。版

其它的自己去查教程吧。

顺带说说,许多人做数据库表设计是想到哪里就建个字段,没有做概念设计,这样的数据库生命周期很权短,而且维护极难。基本知识学好了非常重要!


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

原文地址: https://outofmemory.cn/sjk/6779244.html

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

发表评论

登录后才能评论

评论列表(0条)

保存