本文转载至 http://www.jianshu.com/p/e9f3b5e0cd19

1.概念简介

coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表的关联使用.

如 课程表 和 章节表 的关系:一个课程跟章节的对应关系是 一对多,单一个章节只能对应一个课程; 而课程表 与 讲师表 之间的关系:一个课程可以有多个讲师,一个讲师也可以讲多个课程,他们之间是多对多的关系 .

表之间就是靠这种相互约束的关系建立关联.

假设要删除一个课程,与此课程相关联的章节是否删除;或者说删除一个章节,这个章节对应的课程是否删除.这个就涉及到多表操作,设置表之间的级联关系.接下来以coreData设置一一讲解

2.coreData 相关设置简介

1)删除关系

删除关系设置

A.ab->B :A对象指向B的删除关系ab被设置为:

No Action:当A被删除时,B对象不变,但会指向一个不存在的对象,一般不建议使用;

Nullify(作废):当A对象被删除时,B对象指向的A对象会置为空,如果A与B的关系式一对多,则是A对象从B容器中移除

Cascade(级联):当A对象被删除时,A对象指向的B对象也会被删除;

Deny(拒绝):当删除指向对象B存在的A对象时,操作将会被拒绝;

如:Course_Section: Cascade , 删除Course时,与Course相关联的Section都会被删除;

Section_Course: Nullify , 删除Section时,与Section相关的Course不会被删除;

2)对象对应关系

对象对应关系

A.ab->B :A对象指向B的对应关系ab被设置为:

To Many: 表示一个A对象可以包含多个B对象;

To One: 表示一个A对象只能对应一个B对象;

如:Course_Section: To Many , 一门Course可以包含多个Section;

Section_Course: To One ,一个Section只能指向一门Course;

所以Course与Section的关系是 1:N (1对多)

如:Course_Teacher: To Many , 一门Course可以包含多位Teacher;

Teacher_Course: To Many ,一位Teacher可以指向多门Course;

所以Course与Section的关系是 M:N (多对多)

3.多表创建流程

1)先创建需要的实体表(方法见"CoreData单表创建使用")

Course, Section, Teacher 表

2)建立关联 设置删除关系,对应关系如下(设置的具体含义已在文章第二部分介绍)

课程_教师 (一课程可包含多个教师,删除关系:作废)

课程_章节(一节课可包含多个章节,删除关系:级联)

章节_课程(一个章节只属于一个课程,删除关系:作废)

教师_课程(一个教师可以讲多门课,删除关系:作废)

创建之后查看style关系:

表关系

3)使用创建的对象生成相应地文件:.h和.m(方法见"CoreData单表创建使用")

根据3个对象创建的文件

根据设置的对象之间的对应关系 会生成相应地属性和方法

Section对应一个课程时 添加课程对象的属性

课程对应的章节以及教师都是多个,生成NSSet 存储 并生成相应方法

NSSet 是一个无序的集合 ,可以使用NSSet 与NSArray根据需要转换使用,其他使用方法 同单表使用的增删查改,只是访问时多层访问.

如:NSPredicate*predict = [NSPredicate predicateWithFormat:@"section_course.courseId = %d",courseId];

如:self.courseEntity.course_teacher.count

........................................................................................................................................

coreData多表关联的基本操作已做一个简单的介绍,具体的功能还待使用者发掘,并且苹果提供了NSFetchController 与coreData结合使用,具体情节,还待下次分享......(欢迎批评指正~~)

CoreData 多表 关联的更多相关文章

  1. iOS开发CoreData的多表关联

    1.多表关联 多表关联,对SQL 数据库的操作,在一张表的数据中可以引用另外一张表里的数据.通过 Entity 实体中的 Relationships 来实现,比起传统的 SQL 数据库来,更加简单. ...

  2. MagicalRecord 多表关联数据操作

    最近在使用MagicalRecord做数据持久层CoreData的操作库,今天做了一个多表关联数据的操作,整理了一个demo,特此记录一下. 关于如何使用Cocopads 和 MagicalRecor ...

  3. IOS-CoreData(增删改查、表关联、分页和模糊查询、多个数据库)

    1>什么是CoreData Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数 ...

  4. Core Data 多表关联

    1.概念简介 coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表的关联使用. 如 课程表 和 章节表 的关系:一个课程跟章节的对应关系是 一对多,单一个 ...

  5. EF里单个实体的增查改删以及主从表关联数据的各种增删 改查

    本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...

  6. yii2 ActiveRecord多表关联以及多表关联搜索的实现

    作者:白狼 出处:http://www.manks.top/yii2_many_ar_relation_search.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明 ...

  7. mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理

    这篇我们来看mongodb另一个非常有意思的东西,那就是$lookup,我们知道mongodb是一个文档型的数据库,而且它也是最像关系型数据库的 一种nosql,但是呢,既然mongodb是无模式的, ...

  8. Oracle中如何实现Mysql的两表关联update操作

    在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

  9. Yii2-多表关联的用法示例

    本篇博客是基于<活动记录(Active Record)>中对于AR表关联用法的介绍. 我会构造一个业务场景,主要是测试我比较存疑的各种表关联写法,而非再次介绍基础用法. 构造场景 订单ar ...

随机推荐

  1. Java数据通讯中使用Googgle Protobuf 序列化与反序列化

    概念 1.什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活.高效.自动的方法,有如XML,不过它更小.更快.也更简单.你可以定义自己的数据结构,然后使用代 ...

  2. python-函数中的参数类型和可变参数解析

    最近,在学习python,天天抱着廖雪峰的教材苦练,https://www.liaoxuefeng.com/ 但廖老毕竟是如此的才华盈溢,我这等小辈真是读起来教程都有些费力. 关于python-函数中 ...

  3. Going deeper with convolutions 这篇论文

    致网友:如果你不小心检索到了这篇文章,请不要看,因为很烂.写下来用于作为我的笔记. 2014年,在LSVRC14(large-Scale Visual Recognition Challenge)中, ...

  4. 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表

    第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...

  5. 切图psd to html页面制作技术学习与总结

    切图流程和注意事项 切图的正确流程做法是: 1 写框架.拿到psd后,先不要做别的,直接在文本编辑器中将网页的框架写出来,不要假设这块将来css要去怎么渲染,完全自然化的标签,不加任何的css. 2 ...

  6. e835. 使JTabbedPane中的卡片生效和失效

    By default, all new tabs are enabled, which means the user can select them. A tab can be disabled to ...

  7. Python 中 __all__ 的作用

    1.测试文件foo.py # -*- coding: utf-8 -*- # import sys # reload(sys) # sys.setdefaultencoding('gbk') __al ...

  8. eclipse debug 执行到断点处并没有停下,断点无效问题

    转自:http://blog.csdn.net/cuidiwhere/article/details/14434439 现象: 利用eclipse debug时,执行到断点处并没有停下.正常情况下,在 ...

  9. 监听输入框值变化的最佳方案 oninput 和 onpropertychange (实时监控文本框改变的最佳方案)

    公司有个文本框,当输入文字/粘贴/复制 或者是键盘猛按的时候,都希望这个文本框能统计出 输入了多少字   这种用 onchange   onkeyup  onkepress  都不怎么好使   最后在 ...

  10. 本地没问题 服务器 提示 Server Error in '/' Application

    一. 先用本机的 IIS 测试,不要用 VS 内附的 Web server,並配置 <customErrors mode="Off"/>,以將真實的錯誤原因顯示出來,看 ...