Files
database/initdb.d/22-entry.sql
T
2021-10-19 13:27:06 +07:00

54 lines
2.0 KiB
SQL
Executable File

CREATE TABLE "entry" (
"id" UUID NOT NULL DEFAULT uuid_generate_v4(),
"createdAt" TIMESTAMPTZ DEFAULT now(),
"updatedAt" TIMESTAMPTZ DEFAULT now(),
"userId" UUID NOT NULL REFERENCES "user"("id") ON DELETE CASCADE,
"type" TEXT NOT NULL,
"entry" TEXT[] NOT NULL CHECK ("entry"[1] IS NOT NULL),
"reading" JSONB NOT NULL DEFAULT '{}', -- TODO: jsonschema
"translation" JSONB NOT NULL DEFAULT '{}', -- TODO: jsonschema
"description" TEXT NOT NULL DEFAULT '',
"tag" TEXT[] NOT NULL DEFAULT '{}',
"level" FLOAT,
"level.kanji" INT,
"frequency" FLOAT,
"key" TEXT UNIQUE,
"_meta" JSONB, -- TODO: jsonschema
PRIMARY KEY ("id")
);
CREATE TRIGGER "t_entry_updatedAt"
BEFORE UPDATE ON "entry"
FOR EACH ROW
EXECUTE PROCEDURE "f_updatedAt"();
CREATE INDEX "idx_entry_updatedAt" ON "entry" ("updatedAt");
CREATE INDEX "idx_entry_userId" ON "entry" ("userId");
CREATE INDEX "idx_entry_type" ON "entry" ("type");
CREATE INDEX "idx_entry_level" ON "entry" ("level");
CREATE INDEX "idx_entry_level.kanji" ON "entry" ("level.kanji");
CREATE INDEX "idx_entry_frequency" ON "entry" ("frequency");
CREATE INDEX "idx_entry_description" ON "entry"
USING pgroonga("description")
WITH (plugins='token_filters/stem', token_filters='TokenFilterStem');
CREATE INDEX "idx_entry_entry" ON "entry"
USING pgroonga("entry")
WITH (
tokenizer='TokenMecab',
normalizer='NormalizerNFKC100("unify_kana", true)'
);
CREATE INDEX "idx_entry_entry_gin" ON "entry" USING GIN("entry");
CREATE INDEX "idx_entry_tag" ON "entry" USING pgroonga ("tag");
CREATE INDEX "idx_entry_meta" ON "entry" USING pgroonga("_meta");
CREATE INDEX "idx_entry_reading" ON "entry"
USING pgroonga("reading")
WITH (
tokenizer='TokenMecab',
normalizer='NormalizerNFKC100("unify_kana", true)'
);
CREATE INDEX "idx_entry_translation" ON "entry"
USING pgroonga("translation");