用于ios上复杂数据结构的sqlite或coredata

用于ios上复杂数据结构的sqlite或coredata,第1张

概述我将在iPhone / Ipad应用程序中使用相当复杂的数据结构.在摆脱了许多不需要的表之后,尽可能地将数据结构扁平化. – 即如果我在真实结构中有一个调用表和地址表,因为我根本不需要更新地址信息,我已经扩展了 IOS调用表以获得地址信息而不是链接表 – 基本上是非规范化的尽我所能减少表的复杂性. 总而言之,我仍然有15张桌子. 我可以轻松地将表脚本编写成SQLlite,并在IOS中快速使用SQL 我将在iPhone / Ipad应用程序中使用相当复杂的数据结构.在摆脱了许多不需要的表之后,尽可能地将数据结构扁平化. –
即如果我在真实结构中有一个调用表和地址表,因为我根本不需要更新地址信息,我已经扩展了 IOS调用表以获得地址信息而不是链接表 – 基本上是非规范化的尽我所能减少表的复杂性.

总而言之,我仍然有15张桌子.

我可以轻松地将表脚本编写成sqllite,并在IOS中快速使用sqllite C API并使其正常工作.

我的问题是 – 对于包含大量相关表的失败的大型数据捕获应用程序,我应该坚持使用sql技能并使用sqlite和C API,还是将其全部转换为coredata?

我对coredata的主要担忧是
a)设置时间 – 是否有一种从现有数据库模式(sql Server,sqlite或脚本)创建coredata数据映射的方法
b)如果我在一个表中有几千行(这是在作业中使用的库存项目列表).我的理解是coredata检索该对象的所有项目,然后使用谓词过滤它们.这是真的如何运作,还是我误解了?如果它的行为像这样有效吗?
c)虽然我尽可能地平整了结构,但我仍然需要将3个或4个表连接在一起 – 核心数据中使用这样的关系是有效的吗?

我没有问题重新读取coredata书籍,然后应用它,如果它真的是这种场景的更好的解决方案,它只是我读过的所有书籍和例子是1或2个具有一些属性与单一关系的实体.我的数据库架构,所以我的coredata数据模型会比这复杂得多.
另一个考虑因素 – 核心数据是否比sqllite提供了任何优势来消耗休息服务或JSON从服务器获取数据并将传输完成细节返回给服务器?

请看下面的经验:
万一有人读这篇文章,想知道我作为sql Server / ASP.net家伙的经历….

我开始使用sqlite,我发现它使用起来快速而简单. API不是很好,但作为一个sql人员,这根本没有我的相位.

我能够使用小mods轻松地从sql Server编写表结构到生成的脚本,让我在sqlite中快速地使用我的表结构

我从asp.net开始访问,所以我对脚本和创建动态sql字符串并不陌生.然而,我不再想使用这种方法,因为我觉得它已经过时了,所以尽管我使用sqlite来检索数据可能有些过分,但我想把数据放到一个合适的对象中.我想创建我的对象数组并编辑对象的属性.它在目标C中对我更有意义.在asp.net中我仍然不为我的数据创建对象,我使用sql Server存储过程,因为我有一个非常复杂的数据结构,并希望完全控制我查询的所有内容.

然而,创建用于包装表的类需要AGES.在核心数据中,只需单击一下即可生成代表您的核心数据实体的类,因此需要花时间手动生成coredata模式,而不是手动生成表示类的类.数据表/ entites /你喜欢称之为什么.

我在这里选择核心数据.

您可能需要使用类别来扩展已生成的类,但这实际上非常简单,非常酷,

coredata的一大优势是fetchedresults控制器自动显示表视图中的更改.因为我的应用程序有2或3个表视图,这是分层的 – 在视图2中更改数据,然后返回到tablevIEw,视图1并查看视图1中所做的更新而无需手动重新加载数据非常非常酷.

谓词没问题.他们有足够的意识,记住,无论你拿走什么东西,你都可以横跨这个对象的关系 – 也很酷,如果有时候有点乱 – 这是一个完全倒退的思考方式我觉得sql.一旦你习惯它,它足够容易和足够强大.起初它有点奇怪

NSManaged对象(您存储在核心数据中的任何对象)及其子类都有自己的managedobjectcontext – 即self.managedobjectContext制作轻而易举地明确保存任何更改,即:

self.name=@"james"self.favouriteColour=@"blue"NSError * error;if ([self.managedobjectContext  save:&error]) {    NSLog(@"saved");}

这比设置sqlite连接,命令和执行它们等更清晰.

核心数据API比sqlite API更清晰(它是c).

猜我是皈依者!

解决方法 首先(你之前可能听说过):核心数据不是数据库.它是一个“具有生命周期,搜索和持久性功能的对象图管理器”,本文将比我更好地描述差异: http://www.cocoawithlove.com/2010/02/differences-between-core-data-and.html.

另请参阅Use CoreData or SQLite on iPhone?及其中的链接以获取可能有用的更多信息.

现在来看你的具体问题:

a) the setup time – is there a way of creating a coredata data map
from an existing database schema (sql Server,sqlite or scripts)

不.您必须首先创建核心数据“模型”(使用Xcode模型编辑器).模型由具有属性和与其他实体的关系的实体组成.
Core Data具有“持久存储”,可以是sqlite文件(也可以是“内存存储”).
Core Data使用的模式和表格是官方未记录的.
您可以尝试直接创建sqlite Core Data存储(格式不是太复杂),但从sqlite迁移到Core Data的最简单方法可能是编写自己的代码来读取sqlite表并创建相应的Core Data对象.

b) if I have a few thousand rows in one table (it’s a List of stock
items that are used on jobs). My understanding is that coredata
retrIEves ALL of the items for that object,then filters them using
predicates. Is this how it really how it works,or have I
misunderstood? Is this efficIEnt if it does behave like this?

你的理解是不正确的.核心数据使用“获取请求”来获取数据,可选地由“谓词”过滤并按“排序描述符”排序.对于基于sqlite的存储,获取请求将转换为SQL查询并在sqlite级别上执行. (这对可能的谓词施加了限制,并且对于获取请求,并非所有SQL查询都是可能的.)
仅将获取的对象加载到内存中.

c) While I have flattened the structure as much as possible,there
still Could be a need for me to join 3 or 4 tables together – in core
data is using the relationships like this as efficIEnt?

是.

… does core data offer any advantages over sqllite for consuming
rest services or JsON to get data from the server and put transfer
completion details back to the server?

也许看看RestKit,它有Core Data支持.但我对此并不熟悉,因此我无法提供有关此问题的更多信息.

总结

以上是内存溢出为你收集整理的用于ios上复杂数据结构的sqlite或coredata全部内容,希望文章能够帮你解决用于ios上复杂数据结构的sqlite或coredata所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1052615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存