【问题标题】:Foreign key definition in sqlitesqlite中的外键定义
【发布时间】:2010-11-10 06:38:44
【问题描述】:

在Objective c中使用sqlite时,有什么方法可以定义表之间的关系并在它们之间提供外键

【问题讨论】:

标签: objective-c sqlite foreign-keys


【解决方案1】:

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

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

  • 创建人员表: 如果不存在人则创建表(ID 整数主键自动增量、名字文本、姓氏文本)

  • 创建地址表: 如果不存在则创建表地址(ID 整数主键自动增量、街道名称文本、街道编号 INT、个人 INT、外键(个人)引用个人(ID))

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    谢谢。

    【讨论】:

      【解决方案3】:

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

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

      Here is the CoreData programming guide 在 Apple 开发者网站上:

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

      【讨论】:

        【解决方案4】:

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

        此解决方案的最大优势在于它与编程语言无关。一旦设置,您就不必再关心源代码中的触发器了。请参阅http://www.sqlite.org/omitted.html 了解更多信息。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 有可用的示例代码吗?我想以编程方式使用 Objective-c
          • 我不知道 Objective-C,只知道 SQLite。您在表“table1”中有 1 个字段 pk_table1,在表“table2”中有 1 个字段 fk_table1。如果您更新您的“fk_table1”,在您的 Objective-C 代码中,您检查新值是否存在于“pk_table1”中,等等……还没有找到任何其他方法。
          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-07-17
            • 1970-01-01
            • 1970-01-01
            • 2013-07-26
            • 2011-05-01
            • 2013-05-03
            相关资源
            最近更新 更多