Files
nat-as-server/schema.mysql.sql
Tom Hempel 810ed24792
Some checks failed
PHPUnit / test (push) Has been cancelled
migration to mysql
2026-07-10 09:57:44 +02:00

271 lines
12 KiB
SQL

CREATE TABLE IF NOT EXISTS schema_version (
id INT NOT NULL PRIMARY KEY,
version INT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS users (
userID VARCHAR(64) NOT NULL PRIMARY KEY,
username VARCHAR(191) NOT NULL UNIQUE,
passwordHash VARCHAR(255) NOT NULL,
role VARCHAR(32) NOT NULL,
entityID VARCHAR(64) NOT NULL,
mustChangePassword TINYINT(1) NOT NULL DEFAULT 1,
createdAt BIGINT NOT NULL,
CONSTRAINT chk_users_role CHECK (role IN ('admin','supervisor','coach'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS admin (
adminID VARCHAR(64) NOT NULL PRIMARY KEY,
username VARCHAR(191) NOT NULL,
location VARCHAR(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS supervisor (
supervisorID VARCHAR(64) NOT NULL PRIMARY KEY,
username VARCHAR(191) NOT NULL,
location VARCHAR(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS coach (
coachID VARCHAR(64) NOT NULL PRIMARY KEY,
supervisorID VARCHAR(64) NOT NULL,
username VARCHAR(191) NOT NULL,
FOREIGN KEY(supervisorID) REFERENCES supervisor(supervisorID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS client (
clientCode VARCHAR(191) NOT NULL PRIMARY KEY,
coachID VARCHAR(64) NOT NULL,
archived TINYINT(1) NOT NULL DEFAULT 0,
archivedAt BIGINT NOT NULL DEFAULT 0,
FOREIGN KEY(coachID) REFERENCES coach(coachID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS questionnaire_category (
categoryKey VARCHAR(191) NOT NULL PRIMARY KEY,
label VARCHAR(255) NOT NULL DEFAULT '',
color VARCHAR(32) NOT NULL DEFAULT '#64748b',
orderIndex INT NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS questionnaire (
questionnaireID VARCHAR(191) NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL DEFAULT '',
version VARCHAR(64) NOT NULL DEFAULT '',
state VARCHAR(64) NOT NULL DEFAULT '',
orderIndex INT NOT NULL DEFAULT 0,
showPoints TINYINT(1) NOT NULL DEFAULT 0,
conditionJson LONGTEXT NOT NULL,
categoryKey VARCHAR(191) NOT NULL DEFAULT '',
structureRevision INT NOT NULL DEFAULT 1,
structureChangedAt BIGINT NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS questionnaire_structure_snapshot (
questionnaireID VARCHAR(191) NOT NULL,
structureRevision INT NOT NULL,
createdAt BIGINT NOT NULL,
manifestJson LONGTEXT NOT NULL,
PRIMARY KEY (questionnaireID, structureRevision),
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS question (
questionID VARCHAR(64) NOT NULL PRIMARY KEY,
questionnaireID VARCHAR(191) NOT NULL,
defaultText LONGTEXT NOT NULL,
type VARCHAR(64) NOT NULL DEFAULT '',
orderIndex INT NOT NULL DEFAULT 0,
isRequired TINYINT(1) NOT NULL DEFAULT 0,
configJson LONGTEXT NOT NULL,
retiredAt BIGINT NOT NULL DEFAULT 0,
retiredInRevision INT NOT NULL DEFAULT 0,
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS answer_option (
answerOptionID VARCHAR(64) NOT NULL PRIMARY KEY,
questionID VARCHAR(64) NOT NULL,
defaultText LONGTEXT NOT NULL,
points INT NOT NULL DEFAULT 0,
orderIndex INT NOT NULL DEFAULT 0,
nextQuestionId VARCHAR(64) NOT NULL DEFAULT '',
retiredAt BIGINT NOT NULL DEFAULT 0,
FOREIGN KEY(questionID) REFERENCES question(questionID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS client_answer (
clientCode VARCHAR(191) NOT NULL,
questionID VARCHAR(64) NOT NULL,
answerOptionID VARCHAR(64) NULL,
freeTextValue LONGTEXT NULL,
numericValue DOUBLE NULL,
answeredAt BIGINT NULL,
PRIMARY KEY (clientCode, questionID),
FOREIGN KEY(clientCode) REFERENCES client(clientCode),
FOREIGN KEY(questionID) REFERENCES question(questionID),
FOREIGN KEY(answerOptionID) REFERENCES answer_option(answerOptionID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS completed_questionnaire (
clientCode VARCHAR(191) NOT NULL,
questionnaireID VARCHAR(191) NOT NULL,
assignedByCoach VARCHAR(64) NULL,
status VARCHAR(64) NOT NULL DEFAULT '',
startedAt BIGINT NULL,
completedAt BIGINT NULL,
sumPoints INT NULL,
PRIMARY KEY (clientCode, questionnaireID),
FOREIGN KEY(clientCode) REFERENCES client(clientCode),
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID),
FOREIGN KEY(assignedByCoach) REFERENCES coach(coachID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS question_translation (
questionID VARCHAR(64) NOT NULL,
languageCode VARCHAR(16) NOT NULL,
text LONGTEXT NOT NULL,
PRIMARY KEY (questionID, languageCode),
FOREIGN KEY(questionID) REFERENCES question(questionID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS answer_option_translation (
answerOptionID VARCHAR(64) NOT NULL,
languageCode VARCHAR(16) NOT NULL,
text LONGTEXT NOT NULL,
PRIMARY KEY (answerOptionID, languageCode),
FOREIGN KEY(answerOptionID) REFERENCES answer_option(answerOptionID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS string_translation (
stringKey VARCHAR(191) NOT NULL,
languageCode VARCHAR(16) NOT NULL,
text LONGTEXT NOT NULL,
PRIMARY KEY (stringKey, languageCode)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS language (
languageCode VARCHAR(16) NOT NULL PRIMARY KEY,
name VARCHAR(191) NOT NULL DEFAULT '',
enabled TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS questionnaire_language_disable (
questionnaireID VARCHAR(191) NOT NULL,
languageCode VARCHAR(16) NOT NULL,
PRIMARY KEY (questionnaireID, languageCode),
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID) ON DELETE CASCADE,
FOREIGN KEY(languageCode) REFERENCES language(languageCode) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS session (
token VARCHAR(128) NOT NULL PRIMARY KEY,
userID VARCHAR(64) NOT NULL,
role VARCHAR(32) NOT NULL,
entityID VARCHAR(64) NOT NULL DEFAULT '',
createdAt BIGINT NOT NULL,
expiresAt BIGINT NOT NULL,
temp TINYINT(1) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS questionnaire_submission (
submissionID VARCHAR(64) NOT NULL PRIMARY KEY,
clientCode VARCHAR(191) NOT NULL,
questionnaireID VARCHAR(191) NOT NULL,
version INT NOT NULL,
submittedAt BIGINT NOT NULL,
submittedByUserID VARCHAR(64) NOT NULL DEFAULT '',
submittedByRole VARCHAR(32) NOT NULL DEFAULT '',
assignedByCoach VARCHAR(64) NULL,
status VARCHAR(64) NOT NULL DEFAULT '',
startedAt BIGINT NULL,
completedAt BIGINT NULL,
sumPoints INT NULL,
structureRevision INT NOT NULL DEFAULT 1,
structureSnapshotJson LONGTEXT NOT NULL,
FOREIGN KEY(clientCode) REFERENCES client(clientCode),
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID),
FOREIGN KEY(assignedByCoach) REFERENCES coach(coachID),
UNIQUE KEY uq_submission_client_qn_version (clientCode, questionnaireID, version),
KEY idx_submission_client_qn (clientCode, questionnaireID),
KEY idx_submission_client_time (clientCode, submittedAt)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS client_answer_submission (
submissionID VARCHAR(64) NOT NULL,
questionID VARCHAR(64) NOT NULL,
answerOptionID VARCHAR(64) NULL,
freeTextValue LONGTEXT NULL,
numericValue DOUBLE NULL,
answeredAt BIGINT NULL,
PRIMARY KEY (submissionID, questionID),
FOREIGN KEY(submissionID) REFERENCES questionnaire_submission(submissionID) ON DELETE CASCADE,
FOREIGN KEY(questionID) REFERENCES question(questionID),
FOREIGN KEY(answerOptionID) REFERENCES answer_option(answerOptionID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS client_followup_note (
clientCode VARCHAR(191) NOT NULL PRIMARY KEY,
note LONGTEXT NOT NULL,
updatedByUserID VARCHAR(64) NOT NULL DEFAULT '',
updatedAt BIGINT NOT NULL,
FOREIGN KEY(clientCode) REFERENCES client(clientCode)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS system_setting (
settingKey VARCHAR(191) NOT NULL PRIMARY KEY,
settingValue LONGTEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS question_score_rule (
ruleID VARCHAR(64) NOT NULL PRIMARY KEY,
questionID VARCHAR(64) NOT NULL,
scopeKey VARCHAR(191) NOT NULL DEFAULT '',
levelKey VARCHAR(191) NOT NULL,
points INT NOT NULL DEFAULT 0,
FOREIGN KEY(questionID) REFERENCES question(questionID) ON DELETE CASCADE,
UNIQUE KEY uq_score_rule_question_scope_level (questionID, scopeKey, levelKey),
KEY idx_score_rule_question (questionID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS scoring_profile (
profileID VARCHAR(64) NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL DEFAULT '',
description LONGTEXT NOT NULL,
isActive TINYINT(1) NOT NULL DEFAULT 1,
greenMin INT NOT NULL DEFAULT 0,
greenMax INT NOT NULL DEFAULT 12,
yellowMin INT NOT NULL DEFAULT 13,
yellowMax INT NOT NULL DEFAULT 36,
redMin INT NOT NULL DEFAULT 37,
processCompleteBands LONGTEXT NOT NULL,
createdAt BIGINT NOT NULL DEFAULT 0,
updatedAt BIGINT NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS scoring_profile_questionnaire (
profileID VARCHAR(64) NOT NULL,
questionnaireID VARCHAR(191) NOT NULL,
weight DOUBLE NOT NULL DEFAULT 1.0,
orderIndex INT NOT NULL DEFAULT 0,
PRIMARY KEY (profileID, questionnaireID),
FOREIGN KEY(profileID) REFERENCES scoring_profile(profileID) ON DELETE CASCADE,
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS client_scoring_profile_result (
clientCode VARCHAR(191) NOT NULL,
profileID VARCHAR(64) NOT NULL,
weightedTotal DOUBLE NOT NULL DEFAULT 0,
band VARCHAR(32) NOT NULL DEFAULT '',
computedAt BIGINT NOT NULL DEFAULT 0,
questionnaireSnapshot LONGTEXT NOT NULL,
coachBand VARCHAR(32) NOT NULL DEFAULT '',
coachReviewedAt BIGINT NOT NULL DEFAULT 0,
coachReviewedByUserID VARCHAR(64) NOT NULL DEFAULT '',
PRIMARY KEY (clientCode, profileID),
FOREIGN KEY(clientCode) REFERENCES client(clientCode) ON DELETE CASCADE,
FOREIGN KEY(profileID) REFERENCES scoring_profile(profileID) ON DELETE CASCADE,
KEY idx_client_profile_result_profile (profileID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;