是否可以使用核心数据模式创建SQL数据库

时间:2015-01-15 07:29:17

标签: mysql sql objective-c sqlite core-data

我有一个core data架构文件,其中包含实体之间的关系。

我需要创建一个SQL数据库,并想知道是否可以仅使用此文件自动创建(MySqlMS-SQL)。

查看SQLite数据库我发现关系没有以任何逻辑方式映射。

2 个答案:

答案 0 :(得分:1)

首先,您对“未以任何逻辑方式映射”关系的评估是不正确的。如果仔细查看Core Data生成的数据库,您会发现关系映射完全,就像在任何其他旧的关系数据库方案中一样,即外键引用其他表中的行。

此外,这些SQLite数据库中的命名约定非常透明(例如,实体和属性名称以Z等开头。

话虽这么说,我强烈反对你破解核心数据生成的数据库文件,甚至用它来通知另一个数据库方案,原因是这些是未记录的功能,可能随时更改,恕不另行通知你根据它们编写的任何代码。

IMO,最实际的做法是以通常的MySQL架构格式快速重写模型,并在更改托管对象模型时手动更新它。

如果您希望自动化该过程,则会提供一组丰富的API来解释和解析NSManagedObjectModel,包括NSEntityDescriptionNSAttributeDescription等类。您可以编写一个迭代您的实体和属性并生成一个可读的MySQL模式文本文件的框架,包含有关索引,版本等的信息。

如果您沿着这条路走下去,请务必通知我们并在Github上发布您的框架以造福他人。

答案 1 :(得分:0)

如果使用Core Data,您可以使用模式文件创建基于SQL的数据库,但其结构完全由Core Data框架控制。 Apple特别告诉我们开发人员不要单独使用libsqlite或任何其他方法进行编辑。如果你这样做,那么Core Data就不会与你有任何关系!

在使用Apple的一个架构文件制作自己的数据库方面,我确信它是可行的,但您必须知道核心数据框架的内部工作方式是否均匀尝试一下。

在制作自己的SQLite DB方面,你必须自己整理所有关系并进行映射。

我认为混合和匹配Core Data资源和自定义构建的SQLite数据库可能是一件令人头痛的事情。我已经使用了这两种方法,并且发现Core Data非常出色(特别是使用iCloud),只要您的应用仅限于Apple即可。