16-CoreData之多表关联(存储自定义数据模型)
2024-08-24 07:42:59
多表关联
1.1-简介
什么是多表关联
在处理数据库的关系中,无非只有三种关系
一对一:一个老师只能在一个教室上课,不可能同时在两个教室上课
一对多:一个教室可以有多个学生,但一个学生只能在一个教室
多对多:一门学科可以有多个学生,一个学生也可以学习多门学科
本小节我们主要学习一对多的关联,通过学习一对多来举一反三其他两种关系
1.2-如果在模型文件中对两个实体之间进行关联?
- 给教室关联学生
给学生关联教室
Type:
- toOne:只指向一个对象(可用于某一个属性是自定义数据模型)
- toMany:可以包含多个对象(一般是集合类型,可用于某一个属性是数组,数组中是自定义模型)
添加数据
ClassRoom *room = [kManagedObjectContext getManagedObjectModel:@"ClassRoom"]; room.roomNumber = @""; Student *student = [kManagedObjectContext getManagedObjectModel:@"Student"];
student.name = @"李四"; [room addStudentObject:student];
// student.classRoom = room; [kManagedObjectContext save];注意上面注释的那行代码,如果不写的话只是把学生加到了这间教室,但是并没有指定这个学生属于哪间教室,所以学生的classRoom属性在数据库中为null
很显然这是不符合常规逻辑了,既然学生与教室已经进行了一对多的关联,那么把学生加到教室自然就应该知道这个学生属于哪间教室
那么如何不写
student.classRoom = room
也能让学生的数据库表格中的classRoom有对应的值呢?我们需要在模型文件的关联中设置反转属性
1.3-删除关联
1.3.1-简介
什么是删除关联
- 当两个表进行关联之后,删除其中一个表的数据对另一个表产生的影响
1.3.2-如何设置删除关联
- 点击实体对应的关系实体,右方有一个Delete Rule选项
- 这里以上图中设置学生的关联实体教室为例
1.3.3-Nullify(为空)
- 如果设置教室相对于学生的删除关联为Nullify,则表示:如果删除教室,学生并不会删除,只是学生的教室为null
1.3.4-Cascade(级联)
- 如果设置教室相对于学生的删除关联为Cascade,则表示:如果删除学生,则学生对应的教室也会被删除
1.3.5-Deny(拒绝)
- 如果设置教室相对于学生的删除关联为Deny,则表示:只要教室存在,就无法删除学生,要想删除学生,就要先删除教室
1.4-删除关联总结
模拟真实需求:
- 删除学生,对应的教室不会被删除
- 只要删除教室,教室里的学生就删除
- 我该如何设置
设置教室实体中的删除关联为Cascade(级联),设置学生实体中删除关系为no Action(表示删除学生不会对教室有影响)
最新文章
- .Net Core Linux centos7行—安装nginx,运行静态网站
- java24
- c 函数调用产生的汇编指令和数据在内存情况(2)
- memwatch
- java笔记13之成员变量与局部变量
- admin嵌套在spring mvc项目里,菜单栏点击新连接每次都会重置
- bzoj 1415: [Noi2005]聪聪和可可
- WPF ListBox/ListView/DataGrid 虚拟化时的滚动方式
- Odoo Linux服务器一键安装脚本使用指南
- [LeetCode] 4. 寻找两个有序数组的中位数
- 算法时间计算:logA(N)与O(n)
- [luogu1341][无序字母对]
- FICO年终完全手册
- Ubuntu 16 修改时区!
- centos安装nginx和配置
- [多线程]wait和notify
- VB-创建类模块DLL文件
- 2018.11.08 NOIP模拟 景点(倍增+矩阵快速幂优化dp)
- python拓展4 数据结构
- 获取主机的对外ip