Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 核心数据与数据库的根本区别?_Database_Core Data - Fatal编程技术网

Database 核心数据与数据库的根本区别?

Database 核心数据与数据库的根本区别?,database,core-data,Database,Core Data,有人能给我解释一下核心数据(显然是“数据存储”)和像SQLite或MySQL这样的数据库之间的根本区别吗 我正在编写一个iPhone应用程序,需要一个静态数据表来显示。我认为核心数据是一个很好的选择,所以我把数据库(对不起-数据存储)的所有内容都设置好并运行起来,然后尝试导入我的数据(它是在一个excel文件中,我将其导出为CSV)。我曾认为这应该是一个简单的过程,就像我在SQLite和其他数据库中多次做的那样,但经过大量研究,结果证明,唯一的“官方”方法是专门为我的数据编写解析器 当我在苹果开

有人能给我解释一下核心数据(显然是“数据存储”)和像SQLite或MySQL这样的数据库之间的根本区别吗

我正在编写一个iPhone应用程序,需要一个静态数据表来显示。我认为核心数据是一个很好的选择,所以我把数据库(对不起-数据存储)的所有内容都设置好并运行起来,然后尝试导入我的数据(它是在一个excel文件中,我将其导出为CSV)。我曾认为这应该是一个简单的过程,就像我在SQLite和其他数据库中多次做的那样,但经过大量研究,结果证明,唯一的“官方”方法是专门为我的数据编写解析器

当我在苹果开发者论坛上问到这一点时,我得到的回答基本上是“你是什么样的白痴,认为你可以直接导入数据而不必编写代码?核心数据不是一个数据库,它是一个数据存储库!!”但就我而言,我看不出其中的区别。在我所看到的每一方面,核心数据的行为都与数据库一模一样,有一种奇特的访问方式和足够的抽象,它可以使用各种文件格式来实际存储数据。事实上,我最终能够使用一个简单的SQLite.import命令导入数据,所以我真的不明白为什么这个概念对我最初的问题的回答者如此陌生


那么我在这里错过了什么?数据存储与数据库有什么根本性的区别,使得简单数据导入的概念对了解这项技术的人来说完全陌生?

字典的定义告诉我: 数据库是数据存储,但数据存储并不总是数据库

您期望的功能在某些数据库中也不可用(但大多数数据库都可用)


例如,数据存储可以存储非关系数据。

核心数据不是数据存储,数据存储是核心数据的一部分。核心数据与对象关系映射(ORM)工具的关系更密切。核心数据实际上可以选择将SQLite用于其数据存储,但您也可以选择XML文件、专有格式或编写自己的数据存储


不确定如何使用SQL导入来导入数据,不应与核心数据兼容,因为核心数据创建了一个包含大量元数据的专有SQL数据库架构。

他们应该让您知道

根据那篇文章,,它允许将关系实体属性模型组织的数据序列化为XML、二进制或SQLite存储。可以使用表示实体及其关系的更高级别对象来操纵数据。核心数据管理序列化版本,提供对象生命周期和对象图管理,包括持久性。核心数据直接与SQLite接口,将开发人员与底层SQL隔离开来。”


我想这是因为“核心数据管理序列化版本”这一事实意味着不能直接导入数据。也就是说,你可能不能直接将数据导入SQLite,因为核心数据可以管理它,尽管你可能可以以某种方式将数据直接导入SQLite。

也许最好将核心数据视为对象存储和作为数据存储的数据库“。当您拥有各种类型的对象,并且彼此之间存在关系时,核心数据是很好的。熟悉的例子是一家公司,员工有老板和下属,属于部门,分配给客户、项目等,有时间表,参加会议。员工可以被重新分配工作,等等。即使定义的关系类型也会不时变化。即使使用核心数据,这也是一个更为繁重的过程,但核心数据比原始数据库更容易实现

如果您只有“数据”,而没有“对象”,那么使用数据库就更容易了。例如,若您只有一个包含原子量等元素的表,那个么您可能只想使用一个数据库

对于您的应用程序,听起来好像只有一个表。只使用SQLite是很容易的,它是可用的,所以如果更方便的话就使用它


另一方面,iOS SDK具有一些与核心数据交互的预构建功能。如果您使用SQLite,就不会得到这些。因此,您可能避免使用自定义代码来导入数据,但必须编写自定义代码来显示数据。真倒霉。创建软件时,有时必须编写代码。我知道,这很奇怪。

核心数据并不像SQL那样,只是一种将数据保存到磁盘或从磁盘存储数据的方法。核心数据的真正功能是为Apple API使用的模型视图控制器应用程序设计提供完整的模型层。因此,核心数据主要是一个带有持久性选项的对象图管理器

对象图是内存中活动对象的集合。在核心数据中,这些是托管对象。它们被称为“托管”对象,因为托管对象上下文不断观察对象,确保它们处于数据模型所说的应该处于的状态和关系中

核心数据确实提供了持久性选项,但对于任何特定的实现,该选项的确切含义在很大程度上都是隐藏的。您甚至可以在同一个应用程序中使用相同的数据模型和具有不同持久性方法的托管对象

SQL的关键区别在于,SQL将实际数据写入磁盘,而核心数据序列化活动对象。当您查看核心数据中的sqlite存储时,您看到的是已被拆分并“冻干”的对象。显然,“冻干”对象在sqlite存储中需要一种相当特定的数据格式,因此核心数据存储使用其自己的定制模式,无论存储的细节如何,该模式基本相同

这就是为什么您不能只交换任何旧的SQL文件,而期望核心数据导入它。SQL文件是行、表和列