【发布时间】:2021-07-18 13:41:53
【问题描述】:
对不起,新手问题。
我使用 SQLite 数据库浏览器创建了我的表,但是:
我不知道如何使用应用程序指定我的外键?
如何创建表之间的关系图?
【问题讨论】:
标签: sqlite
对不起,新手问题。
我使用 SQLite 数据库浏览器创建了我的表,但是:
我不知道如何使用应用程序指定我的外键?
如何创建表之间的关系图?
【问题讨论】:
标签: sqlite
我找不到使用“数据库结构”选项卡定义外键约束的方法。我强烈建议使用脚本来定义表定义和约束,而不是使用图形编辑器来构建它们——它使创建新数据库和跟踪架构更改变得更加容易。
举个例子,假设我们有两张表:一张定义文件名,一张指定用于压缩的方法,我们可以在定义file_definition表时添加外键约束。
CREATE TABLE [compression_state] (
[compression_state_id] INTEGER PRIMARY KEY NOT NULL,
[value] TEXT NOT NULL
);
CREATE TABLE [file_definition] (
[file_id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[compression_state_id] INTEGER NOT NULL,
[name] TEXT NOT NULL,
FOREIGN KEY(compression_state_id) REFERENCES compression_state(compression_state_id)
);
但是,默认情况下,SQLite 不会强制执行约束,因此每次连接数据库时,都必须发出以下命令来启用约束检查。
PRAGMA foreign_keys = ON;
更多详情见documentation。
如果表已经存在并且您不想构建完整的脚本,那么您很不幸,SQLite 不支持在生成表后添加外键,请参见此处:SQL Features That SQLite Does Not Implement
【讨论】:
进入编辑表定义窗口
点击添加字段
使用类型命名它:整数
向右滚动并找到外键列
在新行的外键列下双击
选择主表及其id字段
点击确定
单击写入更改
【讨论】:
来自 SQLite 文档:
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER -- Must map to an artist.artistid!
);
最后:
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER,
FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
在 SQLite 环境 (v 3.8.0 - Sqlite v 3.9.2) 的 DB 浏览器中,当您添加 track 表的 DB 字段以及
PK ,AI 等列可以找到外键列。
在那里,对于本示例,您只需在 trackartist 行中添加 artist(artistid)。
然后创建外键约束。
【讨论】:
在数据库浏览器中,在编辑表定义窗口中,您可以双击外键的空白区域,将激活一个文本框。你可以在那里添加你的外键。
【讨论】:
这真的很简单,只要这样做 进入编辑表定义窗口
右键单击要关联的表(外部表)
选择修改表
在约束选项卡上选择添加约束按钮并选择外键 您可以在此处关联表格,然后返回字段选项卡并执行
使用类型命名它:整数
向右滚动并找到外键列
在新行的外键列下双击
选择主表及其id字段
点击确定
单击写入更改
【讨论】:
SQLite3 中的触发器强制执行外键约束。链接https://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers 将帮助您解决您的第一个问题。
【讨论】:
我不确定这是否完全正确,但这是我所做的:
【讨论】: