如何创建数据库表之间的关联关系

web 专栏收录该内容
9 篇文章 0 订阅


         
                                         一对一关联
 
1.一对一的单向主键关联:
例如两张表:Husband和wife,在数据库中设置彼此的主键id相互关联(少用)
此时在两个实体类中不用添加任何的对象属性
2.一对一的单向外键关联
例如两张表:Husband和wife
***在设计实体类时建立联系:
对象模型:只在Husband类中添加属性private Wife wife;并生成getter和setter方法,
         如果不使用多表关联查询HQL语句,那么要进行多表查询需在Husband实体类中再添加private int wifeid;属性,这也是传统做法
关系模型:以Wife表为主导:
         在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系
或者:
对象模型:只在Wife类中添加属性private Husband husband;并生成getter和setter方法,
         如果不使用多表关联查询HQL语句,那么要进行多表查询需在Wife实体类中添加private int husbandid;属性,这也是传统做法
关系模型:以Husband表为主导:
         在wife表中添加一个字段husbandid,该字段与husband表中的id建立关联关系
3.一对一的双向外键关联
对象模型:在Husband类中添加属性private Wife wife;并生成getter和setter方法,同时在
         在Wife类中添加属性private Husband husband;并生成getter和setter方法
关系模型:两种主导关系建立任意一种即可,不必两种主导关系同时建:
         以Wife表为主导:在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系或者
         以Husband表为主导:在wife表中添加一个字段husbandid,该字段与husband表中的id建立关联关系
        
4.一对一双向主键关联----(不重要,此处不再介绍)

----------------------------------------------------------------------------------------------
总结:一对一单向和双向在数据库中的表现是一样的,区别体现在java程序中,单向只能找一次,双向可以相互找到
----------------------------------------------------------------------------------------------
 
                                 一对多和多对一关联 ---- 原则:在多方添加外键
  两张表:user表和group表
1.多对一的单向关联:
对象模型:根据在多方添加外键的构思:在多方User类中添加属性:private Group group;
关系模型:在user表中添加groupid字段,该字段和group表中的id关联
2.一对多的单向关联:
对象模型:在一的一方设置多方的集合属性:即在group中设置:private Set<User> users = new HashSet<User>();//此处最适合使用set集合,因为不会重复
关系模型:和多对一在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid字段,该字段和group表中的id关联
3.多对一(一对多)的双向关联:
对象模型:在单方添加集合属性,在多方添加对象属性
关系模型:和单向在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid字段,该字段和group表中的id关联
----------------------------------------------------------------------------------------------
总结:数据库表现相同并遵循一个原则:在多方设置外键
----------------------------------------------------------------------------------------------

                                            多对多关联 --- 增加中间表
  两张表:teacher表和student表
1.多对多单向关联:
对象模型:在其中某一个实体类中设置set集合属性
关系模型:增加中间表,包含studentid和teacherid,并分别向两张表做关联
2.多对多双向关联:
对象模型:在两个实体类中均设置set集合属性
关系模型:和单向关联在数据库表现一致,增加中间表,包含studentid和teacherid,并分别向两张表做关联
-----------------------------------------------------------------------------------------------
总结:在数据库表现一致:增加中间表,类中设置set集合
-----------------------------------------------------------------------------------------------

-----------之前的BBS项目中数据库表设计:
新闻表和评论表:
             1.如果要先查询新闻再查询评论,则确定两张表为一对多关系
             2.如果想在查询评论的时候查询它属于哪个新闻,则确定关系为多对一
到底是一对多还是多对一对在数据库中的表现没有影响,都是在多方设置外键,但是在java类中的表现不同,
是在一方添加set集合属性,还是在多方添加对象属性,这取决于关联关系,既然双向,单向在数据库中表现一致,
那么在java类中建议设置成双向关联。


  • 3
    点赞
  • 1
    评论
  • 7
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论1
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

智玲君

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值