CREATE TABLE `discount` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `description` TEXT NOT NULL, `discount_percent` DECIMAL(8, 2) NOT NULL, `deleted_at` INT(8) NOT NULL, `modified_at` INT(8) NOT NULL, `created_at` INT(8) NOT NULL, `active` BOOLEAN NOT NULL ); CREATE TABLE `user_address` ( `address_line1` VARCHAR(255) NOT NULL, `city` VARCHAR(255) NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `country` VARCHAR(2) NOT NULL, `user_id` INT UNSIGNED NOT NULL, `mobile` VARCHAR(255) NOT NULL, `postal_code` INT NOT NULL, `address_line2` VARCHAR(255) NOT NULL, `telephone` VARCHAR(255) NOT NULL ); ALTER TABLE `user_address` ADD UNIQUE `user_address_mobile_unique` (`mobile`); ALTER TABLE `user_address` ADD UNIQUE `user_address_telephone_unique` (`telephone`); CREATE TABLE `product_inventory` ( `created_at` INT(8) NOT NULL, `modified_at` INT(8) NOT NULL, `quantity` INT NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `deleted_at` INT(8) NOT NULL ); CREATE TABLE `payment_details` ( `order_id` INT NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `status` VARCHAR(255) NOT NULL, `provider` VARCHAR(255) NOT NULL, `modified_at` INT(8) NOT NULL, `amount` INT NOT NULL, `created_at` INT(8) NOT NULL ); CREATE TABLE `order_details` ( `payment_id` INT UNSIGNED NOT NULL, `total` DECIMAL(8, 2) NOT NULL, `modified_at` INT(8) NOT NULL, `created_at` INT(8) NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `user_id` INT UNSIGNED NOT NULL ); CREATE TABLE `order_items` ( `modified_at` INT(8) NOT NULL, `user_id` BIGINT NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `quantity` INT NOT NULL, `order_id` INT UNSIGNED NOT NULL, `created_at` INT(8) NOT NULL, `product_id` INT UNSIGNED NOT NULL ); CREATE TABLE `user_payment` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `provider` VARCHAR(255) NOT NULL, `account_no` VARCHAR(255) NOT NULL, `expiry` DATE NOT NULL, `payment_type` VARCHAR(255) NOT NULL, `user_id` INT UNSIGNED NOT NULL ); CREATE TABLE `product` ( `category_id` INT UNSIGNED NOT NULL, `model` VARCHAR(255) NOT NULL, `color` VARCHAR(255) NOT NULL, `engine` VARCHAR(255) NOT NULL, `description` TEXT NOT NULL, `make` VARCHAR(255) NOT NULL, `inventory_id` INT UNSIGNED NOT NULL, `discount_id` INT UNSIGNED NOT NULL, `created_at` INT(8) NOT NULL, `name` VARCHAR(255) NOT NULL, `deleted_at` INT(8) NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `modified_at` INT(8) NOT NULL, `price` DECIMAL(8, 2) NOT NULL ); CREATE TABLE `product_category` ( `created_at` INT(8) NOT NULL, `name` VARCHAR(255) NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `modified_at` INT(8) NOT NULL, `desc` TEXT NOT NULL, `deleted_at` INT(8) NOT NULL ); CREATE TABLE `user` ( `is_active` BOOLEAN NOT NULL DEFAULT '1', `lower_name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL DEFAULT 'NONE', `passwd_hash_algo` VARCHAR(255) NOT NULL DEFAULT 'NONE', `modified_at` INT(8) NOT NULL DEFAULT '0', `is_admin` BOOLEAN NOT NULL DEFAULT '0', `name` VARCHAR(255) NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `created_at` INT(8) NOT NULL DEFAULT '0', `passwd` VARCHAR(255) NOT NULL DEFAULT 'NONE' ); ALTER TABLE `user` ADD UNIQUE `user_email_unique` (`email`); CREATE TABLE `shopping_session` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `created_at` INT(8) NOT NULL, `user_id` INT UNSIGNED NOT NULL, `modified_at` INT(8) NOT NULL, `total` DECIMAL(8, 2) NOT NULL ); CREATE TABLE `cart_item` ( `product_id` INT UNSIGNED NOT NULL, `session_id` INT UNSIGNED NOT NULL, `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `created_at` INT(8) NOT NULL, `modified_at` INT(8) NOT NULL, `quantity` INT NOT NULL ); ALTER TABLE `product` ADD CONSTRAINT `product_inventory_id_foreign` FOREIGN KEY (`inventory_id`) REFERENCES `product_inventory` (`id`); ALTER TABLE `order_items` ADD CONSTRAINT `order_items_order_id_foreign` FOREIGN KEY (`order_id`) REFERENCES `order_details` (`id`); ALTER TABLE `product` ADD CONSTRAINT `product_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `product_category` (`id`); ALTER TABLE `order_details` ADD CONSTRAINT `order_details_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`); ALTER TABLE `cart_item` ADD CONSTRAINT `cart_item_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`); ALTER TABLE `order_items` ADD CONSTRAINT `order_items_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`); ALTER TABLE `user_address` ADD CONSTRAINT `user_address_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`); ALTER TABLE `order_details` ADD CONSTRAINT `order_details_payment_id_foreign` FOREIGN KEY (`payment_id`) REFERENCES `payment_details` (`id`); ALTER TABLE `product` ADD CONSTRAINT `product_discount_id_foreign` FOREIGN KEY (`discount_id`) REFERENCES `discount` (`id`); ALTER TABLE `user_payment` ADD CONSTRAINT `user_payment_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`); ALTER TABLE `shopping_session` ADD CONSTRAINT `shopping_session_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`); ALTER TABLE `cart_item` ADD CONSTRAINT `cart_item_session_id_foreign` FOREIGN KEY (`session_id`) REFERENCES `shopping_session` (`id`);