【问题标题】:SQLite is not assigning primary keysSQLite 没有分配主键
【发布时间】:2019-03-07 22:21:22
【问题描述】:

我有一个使用 sqlite3.exe 创建的简单 SQLite 数据库(代码如下)。当我通过 SchemaSpy 运行它时,我的前三个表中似乎没有主键。我不明白前三个表中的 CREATE TABLE 语句有什么问题。

代码输入:

.open test1.db
PRAGMA foreign_keys = ON;

CREATE TABLE META_E (E_ID INTEGER PRIMARY KEY NOT NULL, E_Name TEXT, Region TEXT, Date DATE);

CREATE TABLE META_D (D_ID INTEGER PRIMARY KEY NOT NULL, Citation TEXT, is_used BOOLEAN);

CREATE TABLE META_G (Completion TEXT, D_ID INTEGER NOT NULL, Location TEXT, PRIMARY KEY (D_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));

CREATE TABLE P_ID_Main (Source_File TEXT, P_ID INTEGER NOT NULL, E_ID INTEGER NOT NULL, D_ID INTEGER NOT NULL, PRIMARY KEY (P_ID, E_ID, D_ID), FOREIGN KEY (E_ID) REFERENCES META_E (E_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));

.dump

转储:

sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE META_E (E_ID INTEGER PRIMARY KEY NOT NULL, E_Name TEXT, Region TEXT, Date DATE);
CREATE TABLE META_D (D_ID INTEGER PRIMARY KEY NOT NULL, Citation TEXT, is_used BOOLEAN);
CREATE TABLE META_G (Completion TEXT, D_ID INTEGER NOT NULL, Location TEXT, PRIMARY KEY (D_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));
CREATE TABLE P_ID_Main (Source_File TEXT, P_ID INTEGER NOT NULL, E_ID INTEGER NOT NULL, D_ID INTEGER NOT NULL, PRIMARY KEY (P_ID, E_ID, D_ID), FOREIGN KEY (E_ID) REFERENCES META_E (E_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));
COMMIT;
sqlite>

SchemaSpy:

【问题讨论】:

    标签: sqlite primary-key schemaspy


    【解决方案1】:

    我不明白 CREATE TABLE 语句有什么问题 前三个表。

    我认为 CREATE TABLE 语句没有任何问题。相反,这似乎是 SchemaSpy 的不足。

    SQLite 没有创建索引,因为没有必要,因为列 E_ID、D_ID(对于 META_D 和 META_G 表)是 rowid 列的别名,可以被视为 MASTER索引(见下面的链接)

    简而言之,列实际上已编入索引,但 SQLite 无需创建索引,因为索引是内置的(例外是一种特殊类型的表,即 WITHOUT ROWID 表)。

    因此索引不会出现在 sqlite_master 中,因为没有必要,而且看起来 SchemaSpy 至少按照您的配置方式,并不能完全满足 SQLite。

    您不妨参考ROWIDs and the INTEGER PRIMARY KEY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      相关资源
      最近更新 更多