0

sqlite3.exe を使用して作成された単純な SQLite データベースがあります (コードは以下にあります)。SchemaSpy で実行すると、最初の 3 つのテーブルに主キーがないように見えます。最初の 3 つのテーブルの 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>

スキーマスパイ: ここに画像の説明を入力 ここに画像の説明を入力

4

1 に答える 1

1

最初の 3 つのテーブルの CREATE TABLE ステートメントの何が問題なのかわかりません。

インデックスに関しては、CREATE TABLE ステートメントに問題はないと考えています。むしろ、SchemaSpy の不足のようです。

列 E_ID、D_ID (META_D および META_G テーブルの両方) は、MASTER インデックスと見なすことができるrowid列のエイリアスであるため、必要がないため、SQLite はインデックスを作成していません(以下のリンクを参照)

要するに、列は実際にはインデックス化されていますが、インデックスが組み込まれているため、SQLite がインデックスを作成する必要はありません (例外は、特別なタイプのテーブルで、WITHOUT ROWID テーブルです)。

そのため、インデックスは sqlite_master には表示されません。必要がなく、少なくとも SchemaSpy が構成されている方法では、SQLite に完全には対応していないようです。

ROWID と INTEGER PRIMARY KEYを参照したい場合があります。

于 2019-03-08T08:06:04.557 に答える