16-CoreData之多表关联(存储自定义数据模型)
多表关联
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(表示删除学生不会对教室有影响)
16-CoreData之多表关联(存储自定义数据模型)的更多相关文章
- iOS开发CoreData的多表关联
1.多表关联 多表关联,对SQL 数据库的操作,在一张表的数据中可以引用另外一张表里的数据.通过 Entity 实体中的 Relationships 来实现,比起传统的 SQL 数据库来,更加简单. ...
- SpringDataJPA - 复杂查询总结 (多表关联 以及 自定义分页 )
实体类 @Entity @Table(name = "t_hotel") @Data public class THotel { @Id private int id; priva ...
- CoreData 多表 关联
本文转载至 http://www.jianshu.com/p/e9f3b5e0cd19 1.概念简介 coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表 ...
- JPA使用nativequery多表关联查询返回自定义实体类
本文为JPA的学习采坑,如有问题欢迎指正. JPA官方推荐的多表关联查询使用不便,接触的有些项目可能会使用JPA 做简单查询,Mybaits做复杂查询.所以想要寻找一种好用的解决方案. JPA多表关联 ...
- Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!
之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...
- java 16 -11 ArrayList存储自定义对象并增强for遍历
需求:ArrayList存储自定义对象并遍历.要求加入泛型,并用增强for遍历. A:迭代器 B:普通for C:增强for LinkedList,Vector,Colleciton,List ...
- C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
- salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...
- 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
随机推荐
- 初识kbmmw 中的smartbind功能
关于kbmmw smartbind 的开发原因及思路,大家可以参见官方的博客说明和红鱼儿的翻译. 今天我就实例操作一下,给大家演示一下具体实现. 我们新建一个工程 放几个基本的控件 在单元里面加上引用 ...
- hdu 1542&&poj 1151 Atlantis[线段树+扫描线求矩形面积的并]
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- EasyDarwin云平台:EasyCamera开源摄像机接入海康威视摄像机PS流转ES流
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376 海康威视使用PS流封装H.264流,EasyDarwin云平台支持ES流.当我们 ...
- 20170316 ABAP注意点
1.debug 时在MODIFY db from table 后数据便提交了: 一般情况下,更新数据库需要commit,但debug会自动commit,程序结束也会自动commit. 2.使用at n ...
- virtualbox Units specified don't exist. SHSUCDX can't install.
version infomatin: virtual box: 5.1.12 platform: win10 x64 target OS: win7 x64 问题 在win10系统上,使用virtua ...
- Java 符号引用 与 直接引用
在类的加载过程中的解析阶段,Java虚拟机会把类的二进制数据中的符号引用 替换为 直接引用,如Worker类中一个方法: public void gotoWork(){ car.run(); //这段 ...
- ThinkPHP验证码不现实的处理方法
ThinkPHP测试的时候遇到验证码不显示的问题,主要解决思路如下: 1.php.ini是否开启gd库: 2.页面编码是否一致: 3.检查页面头部信息BOM,这是最主要的,把下面代码复制到根目录下,然 ...
- struts2中<s:if>标签的使用
转载:http://blog.sina.com.cn/s/blog_5f9938640100v2kr.html A:<s:if>判断字符串的问题: 1.判断单个字符:<s:if te ...
- TCP连接过程
TCP建立连接与释放连接 最近复习准备<计算机网络>考试,感觉TCP协议建立连接与释放连接这两个过程比较重要,所以把自己理解的部分写下来. 1.建立连接:(三次握手) (1)客户端发 ...
- 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)
基于深度学习和迁移学习的识花实践(转) 深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...