我有一个使用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>
答案 0 :(得分:1)
我不了解CREATE TABLE语句在哪里出了问题 前三个表。
我认为索引CREATE TABLE语句没有错。相反,这似乎是SchemaSpy的不足。
SQLite不会创建索引,因为E_ID,D_ID列(对于META_D和META_G表)都是 rowid 列的别名,可以将其视为MASTER索引(请参见下面的链接)。
简而言之,实际上已对该列进行了索引,但是由于内置了索引,因此SQLite无需创建索引(例外情况是表的一种特殊类型,即WITHOUT ROWID表)。
因此,这些索引不会出现在sqlite_master中,因为没有必要,而且看来SchemaSpy(至少按照您的配置方式)不能完全满足SQLite的需求。