【发布时间】:2010-11-10 06:38:44
【问题描述】:
在Objective c中使用sqlite时,有什么方法可以定义表之间的关系并在它们之间提供外键
【问题讨论】:
标签: objective-c sqlite foreign-keys
在Objective c中使用sqlite时,有什么方法可以定义表之间的关系并在它们之间提供外键
【问题讨论】:
标签: objective-c sqlite foreign-keys
您可以通过将 FOREIGN KEY 语句添加到 SQL CREATE 命令来轻松创建外键。
例如当有一个人和地址实体时:
创建人员表: 如果不存在人则创建表(ID 整数主键自动增量、名字文本、姓氏文本)
创建地址表: 如果不存在则创建表地址(ID 整数主键自动增量、街道名称文本、街道编号 INT、个人 INT、外键(个人)引用个人(ID))
这会将 ADDRESS 表的 PERSONID 列标记为指向 PERSON 表的 ID 列的外键。
您还可以在以下位置找到完整的教程: http://www.apptite.be/tutorial_ios_sqlite.php
【讨论】:
第 1 步:转到 SQLiteManager 中的工具菜单。
第 2 步:打开 On-Connect SQL 选项卡。
第 3 步:设置“PRAGMA foreign_keys=ON;”并保存。
您可以使用数据库作为正常的PK和FK关系。
谢谢。
【讨论】:
如果您使用 Cocoa CoreData 框架,并定义了一个托管对象模型,使用 SQLite 作为持久存储 - 您可以指定模型之间的关系,并指定删除规则(如级联或拒绝),这些将被执行并在您从 Objective-C 对实体进行更改时进行验证,并在您保存时提交回数据库。
关系和规则与数据库外键规则非常相似,但由 Objective-C 运行时内的 CoreData 框架执行。 SQLite 数据库仅用作托管对象图的持久存储。
Here is the CoreData programming guide 在 Apple 开发者网站上:
NB 这个框架是 Cocoa 特有的,你的问题没有明确提到使用 Cocoa,只是 Objective-C
【讨论】:
您可以像在任何其他 sql 数据库系统中一样在 sqlite 中定义外键关系,但要实际执行它们,您需要额外的触发器。这些可以使用官方 sqlite 发行版附带的工具从数据库方案中自动编译。
此解决方案的最大优势在于它与编程语言无关。一旦设置,您就不必再关心源代码中的触发器了。请参阅http://www.sqlite.org/omitted.html 了解更多信息。
【讨论】:
SQLite 不是“真正的”关系-数据库,您可以拥有链接到其他表主键的字段,但您必须从代码中控制所有内容。 删除也一样,没有 CASCADE 或其他完整性控制。
【讨论】:
您可以像在其他 sql-datebase 系统中一样在 sqlite 中使用外键,但请注意,sqlite 中的外键约束未检查/强制执行!
【讨论】: