数据库的一对一,一对多,多对多

关联映射:一对多/多对一

存在最普遍的映射关系,A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行。只有当一个相关列是一个主键或具有唯一约束时,才能创建一对多关系。

简单来讲就如球员与球队的关系;

一对多:从球队角度来说一个球队拥有多个球员 即为一对多

多对一:从球员角度来说多个球员属于一个球队 即为多对一

数据表间一对多关系如下图:

总结一下数据库的 一对多、多对一、一对一、多对多 关系  - 菜鸟学软件 - 我的博客

关联映射:多对多

多对多关系中,A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为结合表,它的主键由 A 表和 B 表的外部键组成。

多对多关系也很常见,例如学生与选修课之间的关系,一个学生可以选择多门选修课,而每个选修课又可以被多名学生选择。

数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。

数据表间多对多关系如下图:

总结一下数据库的 一对多、多对一、一对一、多对多 关系  - 菜鸟学软件 - 我的博客

关联映射:一对一

一对一关系中,A 表中的一行最多只能匹配于 B 表中的一行,反之亦然。如果相关列都是主键或都具有唯一约束,则可以创建一对一关系。

这种关系并不常见,因为一般来说,按照这种方式相关的信息都在一个表中。可以利用一对一关系来:

  • 分割具有多列的表。

  • 由于安全原因而隔离表的一部分。

  • 保存临时的数据,并且可以毫不费力地通过删除该表而删除这些数据。

  • 保存只适用于主表的子集的信息。

一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。

数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。图示如下:

一对一外键关联:

总结一下数据库的 一对多、多对一、一对一、多对多 关系  - 菜鸟学软件 - 我的博客

hibernate中配置

<class name="Person"> 
    <id name="id" column="personId">
        <generator class="native"/> 
    </id>
    <many-to-one name="address" column="addressId" <span style="color:#FF0000;">unique="true"</span> not-null="true"/>
</class>
<class name="Address"> 
    <id name="id" column="addressId"> 
        <generator class="native"/> 
    </id> 
</class>

create table Person ( personId bigint not null primary key, addressId bigint not null unique ) 
create table Address ( addressId bigint not null primary key ) 


一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系

总结一下数据库的 一对多、多对一、一对一、多对多 关系  - 菜鸟学软件 - 我的博客

hibernate中配置

<class name="Person">
    <id name="id" column="personId"> 
        <generator class="native"/> 
    </id> 
</class> 

<class name="Address"> 
    <id name="id" column="personId"> 
        <generator class="foreign"> 
            <param name="property">person</param> 
        </generator> 
    </id> 
<one-to-one name="person" constrained="true"/> 
</class>

create table Person ( personId bigint not null primary key ) 
create table Address ( personId bigint not null primary key ) 




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值