-- Server version 8.0.32 -- -- Table structure for table `users` -- CREATE TABLE `users` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `username` varchar(30) NOT NULL, `email` varchar(128) NOT NULL, `password` binary(64) NOT NULL, `display_name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idusers_UNIQUE` (`id`), UNIQUE KEY `username_UNIQUE` (`username`), UNIQUE KEY `email_UNIQUE` (`email`) ); -- -- Table structure for table `clients` -- CREATE TABLE `clients` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `name` varchar(128) DEFAULT NULL, `address` varchar(128) DEFAULT NULL, `phone` varchar(16) DEFAULT NULL, `email` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`) ); -- -- Table structure for table `orders` -- CREATE TABLE `orders` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `client` bigint unsigned NOT NULL, `user` bigint unsigned NOT NULL, `is_draft` tinyint NOT NULL DEFAULT '1', PRIMARY KEY (`id`), KEY `user_idx` (`user`), KEY `client_idx` (`client`), CONSTRAINT `client` FOREIGN KEY (`client`) REFERENCES `clients` (`id`), CONSTRAINT `user` FOREIGN KEY (`user`) REFERENCES `users` (`id`) ); -- -- Table structure for table `imported_products` -- CREATE TABLE `imported_products` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `order` bigint unsigned NOT NULL, `name` varchar(128) DEFAULT NULL, `link` varchar(1024) NOT NULL, `price_imported` decimal(10,2) NOT NULL DEFAULT '0.00', `price` decimal(10,2) NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`), KEY `order_idx` (`order`), CONSTRAINT `order2` FOREIGN KEY (`order`) REFERENCES `orders` (`id`) ); -- -- Table structure for table `offer` -- CREATE TABLE `offer` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `name` varchar(45) NOT NULL, `description` text, `recommended_price` decimal(10,2) DEFAULT NULL, PRIMARY KEY (`id`) ); -- -- Table structure for table `order_templates` -- CREATE TABLE `order_templates` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `name` varchar(45) NOT NULL, `description` text, PRIMARY KEY (`id`) ); -- -- Table structure for table `sessions` -- CREATE TABLE `sessions` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `user` bigint unsigned NOT NULL, `expiry_date` timestamp NULL DEFAULT ((now() + interval 30 day)), PRIMARY KEY (`id`), KEY `user_idx` (`user`), CONSTRAINT `user_session` FOREIGN KEY (`user`) REFERENCES `users` (`id`) ); -- -- Table structure for table `work` -- CREATE TABLE `work` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `order` bigint unsigned NOT NULL, `offer` bigint unsigned NOT NULL, `price` decimal(10,2) NOT NULL, `notes` text, `is_fulfilled` tinyint NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `order_idx` (`order`), KEY `offer_idx` (`offer`), CONSTRAINT `offer` FOREIGN KEY (`offer`) REFERENCES `offer` (`id`), CONSTRAINT `order` FOREIGN KEY (`order`) REFERENCES `orders` (`id`) ); -- -- Table structure for table `work_templates` -- CREATE TABLE `work_templates` ( `id` bigint unsigned NOT NULL DEFAULT (((unix_timestamp() * 1000 * pow(2,22)) + floor((rand() * pow(2,12))))), `order_template` bigint unsigned NOT NULL, `offer` bigint unsigned NOT NULL, `price` decimal(10,2) NOT NULL DEFAULT '0.00', `notes` text, PRIMARY KEY (`id`), KEY `order_template_idx` (`order_template`), KEY `offer_idx` (`offer`), CONSTRAINT `offer2` FOREIGN KEY (`offer`) REFERENCES `offer` (`id`), CONSTRAINT `order_template` FOREIGN KEY (`order_template`) REFERENCES `order_templates` (`id`) ); -- -- Final view structure for view `orderSummaries` -- CREATE VIEW `orderSummaries` AS SELECT `id`, `client`, `user`, `is_draft`, (COALESCE(`imported_products`.`price`, 0) + COALESCE(`work`.`price`, 0)) AS `value`, COALESCE(`imported_products`.`count`, 0) as `imported_products_count`, COALESCE(`work`.`count`, 0) as `work_count` FROM `orders` LEFT JOIN ( SELECT `order`, SUM(`price`) as `price`, COUNT(*) AS `count` FROM `imported_products` GROUP BY `order` ) as `imported_products` ON `orders`.`id` = `imported_products`.`order` LEFT JOIN ( SELECT `order`, SUM(`price`) AS `price`, COUNT(*) AS `count` FROM `work` GROUP BY `work`.`order` ) AS `work` ON `work`.`order` = `orders`.`id`;