gpt4 book ai didi

ios - ios上的复杂数据结构的sqlite或核心数据

转载 作者:可可西里 更新时间:2023-11-01 05:41:40 25 4
gpt4 key购买 nike

我要在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在使用rest服务或JSON从服务器获取数据并将传输完成详细信息放回服务器方面具有任何优势?

请在下面查看我的经验:
万一有人读了这篇文章并想知道我作为SQL Server / ASP.net家伙的经历...。

我开始使用SQLite,我发现它足够快速且易于使用。该API并不是很好,但是作为一个SQL专家,这一点也没有解决我的问题。

我能够使用小型模块轻松地将SQL Server中的表结构编写脚本到生成的脚本中,从而很快在SQLite中使用我的表结构编写脚本

我从具有访问权限的asp.net开始,所以对脚本编写和创建动态SQL字符串并不陌生。但是,我不再希望使用这种方法,因为我觉得它已经过时了,因此尽管在使用SQLite检索数据时可能已经过时了,但我想将数据放入适当的对象中。我想创建对象的数组并编辑对象的属性。在 objective-c 中,这对我来说更有意义。在asp.net中,我仍然不为数据创建对象,我使用SQL Server存储过程,因为我的数据结构非常复杂,并且希望完全控制我查询的所有内容。

但是,要使用AGES来创建用于包装表的类。在核心数据中,只需单击一下即可生成一个代表您的核心数据实体的类,因此,折衷方案是花时间手动生成coredata模式与手动生成用于表示的类数据表/实体/无论您喜欢称呼它们什么。

我在这里选择了核心数据。

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

coredata的一大优势是fetchedresults控制器可以自动在表格视图中显示更改。由于我的应用程序具有2或3个分层的表视图-在视图2中更改数据,然后返回到表视图,视图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)。

猜猜我是个convert依者!

最佳答案

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

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

现在是您的具体问题:

a)建立时间–是否有创建Coredata数据图的方法
从现有的数据库架构(SQL Server,SQLite或脚本)

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

b)如果我在一张表中有几千行(这是库存清单)
作业中使用的项目)。我的理解是核心数据
检索该对象的所有项目,然后使用过滤
谓词。这是真的吗,还是我
误会了吗?如果这样做确实有效吗?

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

c)在我尽可能扁平化结构的同时,
我仍然可能需要将3或4张桌子连在一起
数据正在使用像这样的关系有效吗?

是。

...与sqllite相比,核心数据是否具有任何优势?
休息服务或JSON以从服务器获取数据并进行传输
完成细节返回服务器?

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

关于ios - ios上的复杂数据结构的sqlite或核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15427986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com