IOS CoreData 多表查询(上)

article/2025/8/19 18:03:00

在网上搜索了下,发现只有部分讲解CoreData关系的,但对多表之间的查询并没有相应的介绍。

因此操作自己写了个。

先创建几个表。

1、部门表:department

      dp_id  Integer  primary key

      dp_deptname   varchar(20) //使用coredata实体创建时用string就行

图:

 

2、员工表:employee

     em_id Integer  primary key

     em_name  varchar(30)

     em_sex   integer   // 0:保密,1男,2女,默认为0

     em_age  integer

     em_bankCardid varchar(20) //卡号

     dp_id_emfk integer //外键用于关联部门表(1VN)

     pt_id_emfk integer //外键用于关联职位表(1VN)

     bk_id_emfk integer// 外键用于关联开户行(1VN)

 

3、职位表:post

     pt_id Integer  primary key

     pt_name varchar(20)   //职位名称

     dp_id_ptfk integer //外键用户关联部门表(1VN)

      sy_id_ptfk integer //外键关联工资等级表(1V1)

 

4、工资等级表:salary

     sy_id  integer primary key

     sy_scale  double  //比例 (用于后属算奖金)

     sy_level varchar(2)  //A,B,C,D..等等级

 

5、开户银行:bank

     bk_id integer primary key

     bk_name varchar(50)   //银行名称

     bk_address varchar(200) //开户地址

 

 

表建好了我们来看一表之间的关系。

部门和员工:一个部门有多个员工,而一个员工只能呆在一个部门(如果同时在两个部分哪是兼职或者能人不在讨论范围),因此部门和员工的关系为1对多关系。

部门与职位:一个部门有多个职位,而一个职位只能在一个部门。因此为:1对多关系。 

部门与工资,开户银行,没有直接关系。(当然部门可能与奖金有挂勾,这个也不在当前讨论范围)

 

员工与职位:一个员工只能身处一职(能人,兼职除外),而一个职位可以由有多名员工。(如程序员职位,哪可以多名),因此为多对一关系。

员工与工资等级:一个员工只能对应一个工程等级和比例,而一个等级比例可以由多名员工拥有。因此为多对一关系。

员工与开户行:当公司替员工开卡的时候,哪么一个开户银行就有多个员工。所以这里会有多对1关系。

 

职位与工资等级:一个职位只配备一个工资级别,同时一个工次级别也只属于一个职位。因为为1对1关系。

职位与开户行没有直接关系。

开户行和工资等级也没有直接关系。

 

下面来构造测试数据

部门数据:

       1       HR      //人力资源

       2       DEV    //开发

       3       POD   //运维

 

员工数据:

      1     张三   男 20   46326587439043   2     3   2             //张三是开发部的开发工程师

      2    李四    女  18    32565443246567  1     2   3            //李四是HR的人事经理

      3    欧阳    女   26   14354654656767  3    9    3           //欧阳是运维的大客户经理

      4    欧阳     女   22   98734298437433  2   6   3            //同名欧阳是开发部测试工程师

 

职位数据:

      1    行政专员             1       NULL

       2   人事经理              1      3

       3    开发工程师         2      2

       4    架构师                 2      NULL

       5    项目经理             2      NULL

       6    测试工程师         2     1

       7    销售代表             3    NULL

       8    销售经理             3    NULL

       9    大客户经理         3       4

 

 

工资等级数据:

      1     0.1    D     

       2     0.15    C

      3        0.4   B

      4        0.8   A

 

开户行数据:

     1    招行     广州        

     2   浦发     上海          

     3   工行      深圳          

 

注:以上是为了作多表关联查询做的故意设计的,并没有使用关系数据库的范式来设计表,因此可能有存在不合理的地方。

红色部分字符,如果是使用CoreData的实体来建,就创建为relationship字段。

大家可以按以上结构在SQLITE中创建好表结构。

数据造好了,下面将进行相关查询演示:

 

1、查询开发部门中名为张三的工资等级。

select  c.sy_level as dj from deparment a,employee b,salary c ,post d  where b.em_name = "张三" and a.dp_deptname = "dev" and a.dp_id = b.dp_id_emfk and d.sy_id_ptfk = c.sy_id and d.pt_id = b.pt_id_emfk

上面一共用到四张表关联。

 

2、查询运维部名为欧阳的工资等级及开户银行。

select  c.sy_level as dj, e.bk_name kfh from deparment a,employee b,salary c ,post d ,bank e where b.em_name = "欧阳" and a.dp_deptname = "dev" and a.dp_id = b.dp_id_emfk and d.sy_id_ptfk = c.sy_id and d.pt_id = b.pt_id_emfk and e.bk_id = b.bk_id_emfk

以上为五张表的关联

 

在造表时不建议大家建太多的外键。如果设及到多表之间的关系,我们应该是另外专门建立一张专门的关联表来进行维护。

这里为只是作演示,我这里就不再列关联表了。

 


http://chatgpt.dhexx.cn/article/mb2V6Jyl.shtml

相关文章

iOS CoreData详解(五)多线程

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:很多小的App只需要一个ManagedContext在主线程就可以了&…

CoreData在Xcode 8 中的使用

如需转载,请注明出处 在Xode8之前,CoreData的使用是非常方便的,先创建一个DataModel , ,然后创建NSManagedObject SubClass,都是一个界面上操作,非常方便,但是更新过Xcode 8后,CoreData的创建需要进行一…

CoreData

Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类。(1)NSManagedObjectModel(被管理的对象模型) 相当于实体,不过它包含 了实体间的关系(2)N…

Core Data详解

转载于:程序媛与程序猿 7.1. 什么是Core Data Core Data是一个Cocoa框架,用于为管理对象图提供基础实现,以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销(undo)和重做(redo&#xff…

Coredata的版本升级

在开发的后期,可能因为完善和修复功能,需要对Coredata数据库表进行修改,这样就需要对CoreData进行版本升级。 比如你修改了DB字段以后,用户在旧版本上升级为新版本时会crash. 因为升级只升级了应用app,没有升级目录下的数据据db文…

在建好的项目中加入CoreData

这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作。于是就想用一把CoreData。但在创建项目初期,没有包含进CoreData。于是就在已建好的项目中加入CoreData。由于第一次用CoreData,各方面还不是很熟悉,在网上爬文…

CoreData的简单使用

简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何…

数据持久化(五)之CoreData

简单的说,Core Data就是可以存储到磁盘的对象图,[...]Core Data可以帮我们做很多任务作.它可以作为软件的整个模型层。它不仅仅在磁盘上存储数据,也把我们需要的数据对象读取到内存中。 ——Marcus Zarra, Core Data Core Data是Mac OS X中Cocoa API的一部分&#…

coredata 详解

原文:Core Data Overview,感谢CocoaChina翻译组帮忙校对。 Core Data可能是OS X和iOS里面最容易被误解的框架之一了,为了帮助大家理解,我们将快速的研究Core Data,让大家对它有一个初步的了解,对于想要正确…

Core Data 详解

Core Data是一个Cocoa框架,用于为管理对象图提供基础实现,以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销(undo)和重做(redo)、有效性检查、以及保证对象关系的完整性等。对象的持久化意…

Core Data概述

昨晚熬夜看发布会(本以为屌丝终于能买得起苹果了,谁知道。。。),因为看不了视频直播,所以就正好有空就把www.objc.io最新的一篇文章翻译了一下,同时感谢CocoaChina翻译组提供校对,以下为正文: Core Data可能…

CoreData 的使用

CoreData其实就是Apple为开发者提供的便捷数据存储方式,本质是对sqlite数据库的操作,操作的数据量为中到大量。 操作数据库,还有FMDB第三方库,相比于FMDB,CoreData要更简单,更方便。 集成CoreData: 1,创…

Core Data的使用

初步看了一下Core Data这个东西,本想早一点写这篇东西的,不过各种俗事缠身,又觉得自己对于Core Data机制了解的还不够深,动笔就慢了几天。不过今天盘点一下,觉得可以说一点东西出来就先说一点吧。 Core Data到底是个什…

CoreData简单使用

苹果的CoreData框架(不限于)提供了一种数据持久化解决方案,它基于如下结构(图片来源苹果官网): 其中涉及了几个概念: NSManagedObject: 数据库中一条记录在内存的实例。 NSManagedObjectConte…

ios中的coredata的使用

Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类。 (1)NSManagedObjectModel(被管理的对象模型) 相当于实体,不过它包含 了实体间的关系 (2…

CoreData使用

一、CoreData的简单使用 1.什么是CoreData 先认识一下这几个类 (1)NSManagedObjectContext(被管理的数据上下文) 作用:用来管理所有表的操作,对表的实体对应的数据库中的表的操作(插入,查询,修改…

iOS CoreData的使用

CoreData是一个专门管理数据服务的框架,把OC对象和存储在SQLite文件中的数据进行互相转换,极大地方便了开发者在数据服务方面的开发。 1. 创建CoreData 在文件创建区下,选择【Core Data】下的【Data Model】 输入CoreData的文件名Model.x…

Core Data 概述

Core Data 概述 转载自: http://www.cocoachina.com/newbie/basic/2013/0911/6981.html Core Data可能是OS X和iOS里面最容易被误解的框架之一了,为了帮助大家理解,我们将快速的研究Core Data,让大家对它有一个初步的了解&#x…

CoreData相关01 基础及运用:添加、查询、过滤、排序、分页

CoreData CoreData中几乎不用写数据库操作语句就能完成数据的本地化存储。 CoreData和iOS中的模型对象相联系在一起,只需要操作模型对象的增删改查就可以完成数据的增删改查,不用写SQL语句。 CoreData的存储方式 SQLite NSSQLiteStoreType XML NSXML…