我有一个core data
架构文件,其中包含实体之间的关系。
我需要创建一个SQL
数据库,并想知道是否可以仅使用此文件自动创建(MySql
或MS-SQL
)。
查看SQLite
数据库我发现关系没有以任何逻辑方式映射。
答案 0 :(得分:1)
首先,您对“未以任何逻辑方式映射”关系的评估是不正确的。如果仔细查看Core Data生成的数据库,您会发现关系映射完全,就像在任何其他旧的关系数据库方案中一样,即外键引用其他表中的行。
此外,这些SQLite数据库中的命名约定非常透明(例如,实体和属性名称以Z
等开头。
话虽这么说,我强烈反对你破解核心数据生成的数据库文件,甚至用它来通知另一个数据库方案,原因是这些是未记录的功能,可能随时更改,恕不另行通知你根据它们编写的任何代码。
IMO,最实际的做法是以通常的MySQL架构格式快速重写模型,并在更改托管对象模型时手动更新它。
如果您希望自动化该过程,则会提供一组丰富的API来解释和解析NSManagedObjectModel
,包括NSEntityDescription
,NSAttributeDescription
等类。您可以编写一个迭代您的实体和属性并生成一个可读的MySQL模式文本文件的框架,包含有关索引,版本等的信息。
如果您沿着这条路走下去,请务必通知我们并在Github上发布您的框架以造福他人。
答案 1 :(得分:0)
如果使用Core Data,您可以使用模式文件创建基于SQL的数据库,但其结构完全由Core Data框架控制。 Apple特别告诉我们开发人员不要单独使用libsqlite
或任何其他方法进行编辑。如果你这样做,那么Core Data就不会与你有任何关系!
在使用Apple的一个架构文件制作自己的数据库方面,我确信它是可行的,但您必须知道核心数据框架的内部工作方式是否均匀尝试一下。
在制作自己的SQLite DB方面,你必须自己整理所有关系并进行映射。
我认为混合和匹配Core Data资源和自定义构建的SQLite数据库可能是一件令人头痛的事情。我已经使用了这两种方法,并且发现Core Data非常出色(特别是使用iCloud),只要您的应用仅限于Apple即可。