【问题标题】:Foreign Key Android DATABASE外键 Android 数据库
【发布时间】:2016-09-17 22:42:57
【问题描述】:

我对在 Android 的 SQLite 数据库中正确使用和实现“外键”感到困惑。

我创建了一个包含多个关系的数据库,如下所示:

CREATE TABLE "food" (
`_id`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`name`  TEXT NOT NULL,
`description`   TEXT,
`category_id`   INTEGER,
FOREIGN KEY(`category_id`) REFERENCES food(_id) )

CREATE TABLE `category` (
`_id`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`cagory_name`   TEXT NOT NULL)

CREATE TABLE "favourites" (
`_id`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`id_favourite`  INTEGER NOT NULL,
FOREIGN KEY(`id_favourite`) REFERENCES food ( _id ))

如您所见,共有 3 个表,“food”的 _id 是连接表“category”和“favourites”的外键。

现在,在 Android 中,我看不到任何可以证明我在表之间创建了这种关系的事情。我是否错过了一些使其生效的声明? 它在 Android 中是如何工作的?

【问题讨论】:

    标签: android database foreign-keys foreign-key-relationship


    【解决方案1】:

    category_id 外键引用看起来很奇怪。 是不是有原因:

    FOREIGN KEY(`category_id`) REFERENCES food(_id)
    

    而不是

    FOREIGN KEY(`category_id`) REFERENCES category(_id)
    

    为了确保执行外键约束,在 SQLite 中运行

    PRAGMA foreign_keys = ON;
    

    有关文档,请参阅 http://www.sqlite.org/foreignkeys.html

    【讨论】:

    • 是的,你是对的,这是一个错误。但除此之外,我仍然看不到 Android 中外键的明确用法
    • 啊,我明白了,你在测试约束并且它没有通过这些测试吗?还是您只是觉得没有必要?
    • 我正在测试它,如果我添加 FOREIGN KEY 属性,我看不到任何差异,因此我假设我错过了一些要在 Android Studio 中实现的代码......例如:我可以添加对不存在的 _id 的引用,并且应用程序仍然可以正常工作...
    • 查看编辑后的答案以确保强制执行外键约束。
    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2018-11-08
    • 2014-10-22
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多