-- MySQL initial schema for OKR application CREATE TABLE `User` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, `username` VARCHAR(191) NOT NULL, `email` VARCHAR(191) NOT NULL, `passwordHash` VARCHAR(191) NOT NULL, `role` VARCHAR(191) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `User_username_key`(`username`), UNIQUE INDEX `User_email_key`(`email`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `Objective` ( `id` INT NOT NULL AUTO_INCREMENT, `title` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NULL, `ownerId` INT NOT NULL, `quarter` VARCHAR(191) NOT NULL, `status` VARCHAR(191) NOT NULL DEFAULT 'NOT_STARTED', `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Objective_ownerId_idx`(`ownerId`), INDEX `Objective_quarter_idx`(`quarter`), INDEX `Objective_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `KeyResult` ( `id` INT NOT NULL AUTO_INCREMENT, `objectiveId` INT NOT NULL, `title` VARCHAR(191) NOT NULL, `progress` INT NOT NULL DEFAULT 0, `startValue` INT NOT NULL, `targetValue` INT NOT NULL, `deadline` DATETIME(3) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `KeyResult_objectiveId_idx`(`objectiveId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `ProgressUpdate` ( `id` INT NOT NULL AUTO_INCREMENT, `keyResultId` INT NOT NULL, `progress` INT NOT NULL, `comment` VARCHAR(191) NULL, `createdById` INT NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE `Objective` ADD CONSTRAINT `Objective_ownerId_fkey` FOREIGN KEY (`ownerId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE `KeyResult` ADD CONSTRAINT `KeyResult_objectiveId_fkey` FOREIGN KEY (`objectiveId`) REFERENCES `Objective`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE `ProgressUpdate` ADD CONSTRAINT `ProgressUpdate_keyResultId_fkey` FOREIGN KEY (`keyResultId`) REFERENCES `KeyResult`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;