用连接表实现一对多关联
在以前的需求中,如一个客房可以对应多个人。这是一对多关系,当然我们在建数据库时,在user中建立一个roomId也就解决问题了,完全没有必要建立一个连接表,现在问题是我需求变化了,那就是增加一个职业,可以这样理解一个职业对应一群人。常规做法是在user表中增加一个occupationId,仿佛也行。。但请注意,如果在增加呢?是不是这个user表增加了许多给表本身没有关系的字段。如果说在级联删除呢?问题很快就会出来了。
这样我们利用中间表可以解决上面需求,一对多时,我们可以利用userid做为中间表的主键,如果改为多对多关系,可以改为联合主键做为主键。对于级联删除,使用连接表,级联删除成为可能。如当职业表中删除一条记录,那么连接表中对应的也被删除,不影响用户表中其他记录。
当然也不是绝对的。如果你很确定两个表之间的关系,用外键关联也是一种解决办法,
一对多单向关联:是通过设计多端外键来进行的。前提是数据库中没有设置外键关联
否则会出现问题。如何解决:
设置<property name=”roomId” column=”roomId” type=”java.lang.string” insert=”false” update=”false”/>也就是显式说明该字段是个外源性字段,,注意,insert update默认为true在当前中只需设置insert为false即可
一对多双向关联:多端需设置many-to-one,实际结果是这样的,插入userinfo记录时,roomId为空,最后在更新的。
连接表来实现一对多双向关联。
一端配置:
Set中所有字段是针对连接表而设置的!
<set name=”users” cascade=”all” table=”roomusers”>
<!—通过连接表的一端,因此需要table属性为roomusers,à
<!—该key为连接表中的字段,作为外键à
<key column=”roomId”/>
<!—unique为true表示userId不可重复,保证一对多关系,事实上,在多对多中只需设置unique=”true”即可等同认为是一对多关系!à
<many-to-many class=”UserInfo” unique=”true” column=”userid”></many-to-many>
</set>
多端配置:
多端配置也是对连接表而设置的
<!—optional表示这是一个外连接!à
<join table=”roomusers” optional=”true” >
<!—该key为连接表中的字段,作为外键à
<key column=”userid”>
<many-to-one name=”room” column=”roomid” not-null=”true”/>
</join>
分享到:
相关推荐
AE 缓冲区代码 + ArcEngine 连接表 join AE 缓冲区代码是 ArcGIS 中的一种常用技术,用于生成缓冲区,以便对空间数据进行分析和处理。本文将详细介绍 AE 缓冲区代码的实现步骤,并结合 ArcEngine 连接表 join 进行 ...
### 数据库连接表查询详解 #### 一、交叉连接(CROSS JOIN) **定义与特点:** 交叉连接(CROSS JOIN)是一种特殊的连接方式,它返回的是参与连接的两个表的所有可能组合,即两个表的笛卡尔积。这种连接不包含任何...
在MySQL中,两表关联的连接表创建索引是一个关键的操作,这直接影响到查询性能。本文将详细讨论如何为这样的连接表设计合适的索引,以及通过实际测试验证不同索引策略的效果。 首先,我们考虑一个典型的多表关联...
本主题将深入探讨两种常用的数据结构——顺序表和链表,并展示如何使用C语言来实现这两种数据结构来连接表。顺序表和链表各有优缺点,理解和掌握它们对于优化算法和提高程序效率至关重要。 首先,我们来讨论顺序表...
这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性...
交叉连接则返回的是连接表中所有数据行的笛卡尔积。 在 SQL 语句中,连接查询可以使用 FROM 子句或 WHERE 子句来实现。FROM 子句中可以使用 JOIN 关键字来指定连接类型和连接条件。例如: ```sql SELECT * FROM ...
可以使用以下功能: 创建到服务器数据库的连接(通过 JDBC) 显示数据库连接和表显示多个表的内容水平和垂直连接表选择和重命名列添加扩展列(例如组件中的中断日期) 添加计算列选择行(例如条件过滤) 指定排序...
"SAP SE16H 表连接查询详解" 在 SAP 系统中,SE16H 是一个功能强大的工具,能够实现复杂的表连接查询。今天,我们将详细介绍如何使用 SE16H 实现表连接查询,并提供一个实际的示例。 SE16H 介绍 SE16H 是 SAP ...
带聚合函数连接是指在连接表时使用聚合函数,如 SUM、AVG、MAX 等。语法为: ``` SELECT 字段,聚合函数(字段) FROM A表 a INNER JOIN B表 b ON a.字段 = b.字段 GROUP BY 字段; ``` 例如,查询部门的员工人数: ``` ...
1. 减少连接表的数量:尽量减少参与连接的表,避免不必要的数据交互。 2. 使用索引:为连接字段创建合适的索引,提高查找速度。主键和外键通常有自动索引,但其他关联字段可能需要手动添加。 3. 选择最佳的连接类型...
Hibernate中的Criteria连表查询,包括单表属性查询,多表内连,以及左外连接查询
Oracle 数据库中的表连接是构建复杂 SQL 查询的基础,它允许从多个表中组合数据。连接方法的选择直接影响到查询性能,因此了解各种连接类型及其适用场景至关重要。本文将深入探讨 Oracle 中的三种主要连接方式:嵌套...
STM32F407定时器内部触发连接列表, 用于配置主从定时器, 是从数据手册里面提取的图片, 方便查找对照
3. 自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。 例如,使用等值连接列出 authors 和 publishers 表中位于同一城市的...
EPLAN设备连接图.f05
优化器在连接表的同时,还要选择访问单表的最佳方式,包括全表扫描、索引扫描(Index unique scan、index range scan、index full scan、index fast full scan、index skip scan)。选择哪种方式取决于数据分布、...
连接顺序也会影响结果,后连接的表的记录将覆盖前连接表中出现的空字段记录。理解这些概念对于进行复杂的数据查询和分析至关重要,特别是在软件开发中,当需要处理大量数据库交互时,掌握多表连接技巧显得尤为重要。
ON子句允许我们使用条件表达式来定义连接条件,而USING子句则允许我们基于共同拥有的列来连接表。 除了连接类型,本文档还提到了在SQL语句中使用WHERE子句进行条件筛选的重要性。WHERE子句用于设置一个条件表达式,...