From 0ca55f065ff3b9e95043d701498b09f80b1df300 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 25 Jun 2025 20:50:12 +0200 Subject: [PATCH] WIP: kanjidic: split news ichi gai nf into separate tables --- migrations/0001_JMDict.sql | 60 +++++++++++++++++-- .../0005_JMDict_search_index_tables.sql | 8 +++ 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/migrations/0001_JMDict.sql b/migrations/0001_JMDict.sql index ba9e2cc..3d6801a 100644 --- a/migrations/0001_JMDict.sql +++ b/migrations/0001_JMDict.sql @@ -43,11 +43,6 @@ CREATE TABLE "JMdict_KanjiElement" ( "entryId" INTEGER NOT NULL REFERENCES "JMdict_Entry"("entryId"), "orderNum" INTEGER NOT NULL, "reading" TEXT NOT NULL, - "news" INTEGER CHECK ("news" BETWEEN 1 AND 2), - "ichi" INTEGER CHECK ("ichi" BETWEEN 1 AND 2), - "spec" INTEGER CHECK ("spec" BETWEEN 1 AND 2), - "gai" INTEGER CHECK ("gai" BETWEEN 1 AND 2), - "nf" INTEGER CHECK ("nf" BETWEEN 1 AND 48), UNIQUE("entryId", "reading"), UNIQUE("entryId", "orderNum") ) WITHOUT ROWID; @@ -55,6 +50,31 @@ CREATE TABLE "JMdict_KanjiElement" ( CREATE INDEX "JMdict_KanjiElement_byEntryId_byOrderNum" ON "JMdict_KanjiElement"("entryId", "orderNum"); CREATE INDEX "JMdict_KanjiElement_byReading" ON "JMdict_KanjiElement"("reading"); +CREATE TABLE "JMdict_KanjiElementNews" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_KanjiElement"("elementId"), + "news" INTEGER NOT NULL CHECK ("news" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_KanjiElementIchi" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_KanjiElement"("elementId"), + "ichi" INTEGER NOT NULL CHECK ("ichi" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_KanjiElementSpec" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_KanjiElement"("elementId"), + "spec" INTEGER NOT NULL CHECK ("spec" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_KanjiElementGai" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_KanjiElement"("elementId"), + "gai" INTEGER NOT NULL CHECK ("gai" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_KanjiElementNF" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_KanjiElement"("elementId"), + "nf" INTEGER NOT NULL CHECK ("nf" BETWEEN 1 AND 48) +); + CREATE TABLE "JMdict_KanjiElementInfo" ( "elementId" INTEGER NOT NULL REFERENCES "JMdict_KanjiElement"("elementId"), "info" TEXT NOT NULL REFERENCES "JMdict_InfoKanji"("id"), @@ -81,6 +101,36 @@ CREATE TABLE "JMdict_ReadingElement" ( CREATE INDEX "JMdict_ReadingElement_byEntryId_byOrderNum" ON "JMdict_ReadingElement"("entryId", "orderNum"); CREATE INDEX "JMdict_ReadingElement_byReading" ON "JMdict_ReadingElement"("reading"); +CREATE TABLE "JMdict_ReadingElementReadingDoesNotMatchKanji" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_ReadingElement"("elementId"), + "readingDoesNotMatchKanji" BOOLEAN NOT NULL, +); + +CREATE TABLE "JMdict_ReadingElementNews" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_ReadingElement"("elementId"), + "news" INTEGER NOT NULL CHECK ("news" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_ReadingElementIchi" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_ReadingElement"("elementId"), + "ichi" INTEGER NOT NULL CHECK ("ichi" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_ReadingElementSpec" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_ReadingElement"("elementId"), + "spec" INTEGER NOT NULL CHECK ("spec" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_ReadingElementGai" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_ReadingElement"("elementId"), + "gai" INTEGER NOT NULL CHECK ("gai" BETWEEN 1 AND 2) +); + +CREATE TABLE "JMdict_ReadingElementNF" ( + "elementId" INTEGER PRIMARY KEY REFERENCES "JMdict_ReadingElement"("elementId"), + "nf" INTEGER NOT NULL CHECK ("nf" BETWEEN 1 AND 48) +); + CREATE TABLE "JMdict_ReadingElementRestriction" ( "elementId" INTEGER NOT NULL REFERENCES "JMdict_ReadingElement"("elementId"), "restriction" TEXT NOT NULL, diff --git a/migrations/0005_JMDict_search_index_tables.sql b/migrations/0005_JMDict_search_index_tables.sql index 67eca9f..971aaf8 100644 --- a/migrations/0005_JMDict_search_index_tables.sql +++ b/migrations/0005_JMDict_search_index_tables.sql @@ -48,6 +48,10 @@ SELECT - (substr(COALESCE("JMdict_JLPTTag"."jlptLevel", 'N0'), 2) * -5) AS "score" FROM "JMdict_ReadingElement" +LEFT JOIN "JMdict_ReadingElementNews" USING ("elementId") +LEFT JOIN "JMdict_ReadingElementIchi" USING ("elementId") +LEFT JOIN "JMdict_ReadingElementSpec" USING ("elementId") +LEFT JOIN "JMdict_ReadingElementGai" USING ("elementId") LEFT JOIN "JMdict_JLPTTag" USING ("entryId"); CREATE VIEW "JMdict_EntryScoreView_Kanji" AS @@ -80,6 +84,10 @@ SELECT - (substr(COALESCE("JMdict_JLPTTag"."jlptLevel", 'N0'), 2) * -5) AS "score" FROM "JMdict_KanjiElement" +LEFT JOIN "JMdict_KanjiElementNews" USING ("elementId") +LEFT JOIN "JMdict_KanjiElementIchi" USING ("elementId") +LEFT JOIN "JMdict_KanjiElementSpec" USING ("elementId") +LEFT JOIN "JMdict_KanjiElementGai" USING ("elementId") LEFT JOIN "JMdict_JLPTTag" USING ("entryId"); CREATE VIEW "JMdict_EntryScoreView" AS