sqlite中的外键定义

时间:2009-07-13 11:35:02

标签: objective-c sqlite foreign-keys

在Objective c中使用sqlite时,有没有办法定义表之间的关系并给出外键?

6 个答案:

答案 0 :(得分:2)

你可以像在其他sql-datebase系统中一样使用sqlite中的外键,但要注意不检查/强制执行sqlite中的外键约束!

答案 1 :(得分:1)

SQLite不是“真正的”关系 - 数据库,您可以拥有链接到其他表主键的字段,但您必须从代码中控制所有字段。 删除相同,没有CASCADE或其他完整性控制。

答案 2 :(得分:1)

您可以通过向SQL CREATE命令添加FOREIGN KEY语句来轻松创建外键。

例如,当有人和地址实体时:

  • 创建人员表: 创建表,如果不是EXISTS PERSON(ID INTEGER PRIMARY KEY AUTOINCREMENT,FIRSTNAME TEXT,LASTNAME TEXT)

  • 创建地址表: CREATE TABLE IF NOT NOT EXISTS ADDRESS(ID INTEGER PRIMARY KEY AUTOINCREMENT,STREETNAME TEXT,STREETNUMBER INT,PERSONID INT,FOREIGN KEY(PERSONID)REFERENCES PERSON(ID))

这会将ADDRESS表的PERSONID列标记为指向PERSON表的ID列的外键。

您还可以在以下位置找到完整的教程: http://www.apptite.be/tutorial_ios_sqlite.php

答案 3 :(得分:1)

您可以在SQLite中为外键关系设置一个标志。

步骤1:转到SQLiteManager中的工具菜单。

步骤2:打开On-Connect SQL选项卡。

步骤3:设置“PRAGMA foreign_keys = ON;”并保存它。

您可以将数据库用作正常的PK和FK关系。

感谢。

答案 4 :(得分:0)

你可以在sqlite中定义外键关系,就像在任何其他sql数据库系统中一样,但要实际执行它们,你需要额外的触发器。这些可以使用官方sqlite发行版附带的工具从数据库方案自动编译。

这个解决方案的一大优势是它与编程语言无关。设置完成后,您不必再关心源代码中的触发器了。有关详细信息,请参阅http://www.sqlite.org/omitted.html

答案 5 :(得分:0)

如果使用Cocoa CoreData框架并定义托管对象模型,使用SQLite作为持久性存储 - 您可以指定模型之间的关系,并指定删除规则(例如级联或拒绝),这些将被执行并在您从Objective-C对实体进行更改时进行验证,并在保存时将其提交回数据库。

关系和规则与数据库外键规则非常相似,但是由Objective-C运行时内的Cor​​eData框架执行。 SQLite数据库仅用作托管对象图的持久性存储。

Apple开发者网站上的

Here is the CoreData programming guide

注意:这个框架是Cocoa特有的,你的问题没有明确提到使用Cocoa,只是Objective-C