8、Active Record 关系映射与功能特性详解

Active Record 关系映射与功能特性详解

1. 数据库关系映射基础

在关系型数据库中,通常存在多个表。以往我们主要关注单表的 Active Record 模型,现在将深入探讨多表之间的关系映射。

以员工表和部门表为例,员工表中的 department 列存储部门名称,如 “Marketing”、“IT” 和 “Sales”。多个员工可能属于同一个部门,这就导致多个记录会存储相同的部门名称。当部门名称发生更改时,如果直接在所有匹配的记录中进行更新查询,效率会非常低,这也是数据库需要进行规范化的典型原因。

解决方案是创建一个专门存储部门名称的表,并为每个部门分配一个唯一的 ID。员工表只需引用部门表的外键即可。这样,当部门名称更改时,只需更新一条记录。

例如,我们可以通过以下简单方式获取部门名称:

department_name = employee.department.name

而不是:

department_id = employee.department_id
department = Department.find(department_id)
department_name = department.name

外键关系会被 Active Record 转换为对象映射。外键必须遵循命名约定,即相关表的模型名称的小写形式(或表名的单数形式)加上 _id 后缀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值