This commit is contained in:
270
schema.mysql.sql
Normal file
270
schema.mysql.sql
Normal file
@ -0,0 +1,270 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user