File manager - Edit - /home/webapp69.cm.in.th/u69319090044/shop/schema.sql
Back
-- Database Schema for CMTC SHOP -- วิธีใช้: สร้าง database 'online_shop' ใน phpMyAdmin ก่อน แล้วค่อย Import ไฟล์นี้ -- 1. Users Table CREATE TABLE IF NOT EXISTS `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(50) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `email` VARCHAR(100) NOT NULL UNIQUE, `first_name` VARCHAR(50) NOT NULL, `last_name` VARCHAR(50) NOT NULL, `role` VARCHAR(20) DEFAULT 'customer', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 2. Products Table CREATE TABLE IF NOT EXISTS `products` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(100) NOT NULL, `description` TEXT, `price` DECIMAL(10,2) NOT NULL, `size` VARCHAR(20) DEFAULT 'Free Size', `stock` INT NOT NULL DEFAULT 0, `image_url` VARCHAR(255) DEFAULT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 3. Cart Items Table CREATE TABLE IF NOT EXISTS `cart_items` ( `user_id` INT NOT NULL, `product_id` INT NOT NULL, `size` VARCHAR(20) NOT NULL DEFAULT 'Free Size', `quantity` INT NOT NULL DEFAULT 1, PRIMARY KEY (`user_id`, `product_id`, `size`), FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 4. Orders Table CREATE TABLE IF NOT EXISTS `orders` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL, `total_amount` DECIMAL(10,2) NOT NULL, `status` VARCHAR(20) DEFAULT 'pending', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `expired_at` DATETIME NULL, FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 5. Order Items Table CREATE TABLE IF NOT EXISTS `order_items` ( `order_id` INT NOT NULL, `product_id` INT NOT NULL, `size` VARCHAR(20) NOT NULL DEFAULT 'Free Size', `quantity` INT NOT NULL, `price_per_unit` DECIMAL(10,2) NOT NULL, PRIMARY KEY (`order_id`, `product_id`, `size`), FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE, FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 6. Payments Table CREATE TABLE IF NOT EXISTS `payments` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `order_id` INT NOT NULL, `payment_method` VARCHAR(50) NOT NULL, `transaction_id` VARCHAR(50) NOT NULL, `amount` DECIMAL(10,2) NOT NULL, `payment_status` VARCHAR(20) NOT NULL, `paid_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 7. Views -- v_cart_details: Details of products in the shopping cart CREATE OR REPLACE VIEW `v_cart_details` AS SELECT ci.user_id, ci.product_id, p.name AS product_name, p.price AS unit_price, ci.size AS size, ci.quantity, (p.price * ci.quantity) AS subtotal, p.stock, p.image_url FROM `cart_items` ci JOIN `products` p ON ci.product_id = p.id; -- v_cart_totals: Aggregated item count and total amount in cart CREATE OR REPLACE VIEW `v_cart_totals` AS SELECT user_id, SUM(quantity) AS total_items, SUM(subtotal) AS total_amount FROM `v_cart_details` GROUP BY user_id; -- 8. Trigger to compute expired_at dynamically (+20 minutes) DROP TRIGGER IF EXISTS `before_orders_insert`; CREATE TRIGGER `before_orders_insert` BEFORE INSERT ON `orders` FOR EACH ROW SET NEW.expired_at = DATE_ADD(NOW(), INTERVAL 20 MINUTE); -- 9. Insert Mock Data -- Password for users is 'password123' (hashed with BCRYPT) INSERT IGNORE INTO `users` (`username`, `password`, `email`, `first_name`, `last_name`, `role`) VALUES ('somchai_dev', '$2y$10$Bubd8tB98rfysg6niGzj2u9Gg3c8tYibW66ovH8Q4vSWiok0fCqgK', 'somchai@example.com', 'สมชาย', 'ใจดี', 'customer'), ('somsri_shop', '$2y$10$Bubd8tB98rfysg6niGzj2u9Gg3c8tYibW66ovH8Q4vSWiok0fCqgK', 'somsri@example.com', 'สมศรี', 'รักษาดี', 'customer'), ('Admin', '$2y$10$VNHkEfsQSTHJ5CivCODY2O5XeyYufEoN2dmauMR62bq60WP5Ncz0q', 'admin@example.com', 'ผู้ดูแลระบบ', 'สถาบัน', 'admin'), ('Admin011', '$2y$10$vn6FUjkxirWovhAAmzJPwO/DYub2JEJub2d5fY2MEZpBEuV/yR6wi', 'admin011@example.com', 'ผู้ดูแลระบบ', '011', 'admin'), ('69319090044', '$2y$10$/p1RbGeE9ueSzVflwAdbIut14ls7mFkydgWfkpgGbBfRIo23ll/5q', '69319090044@cmtcshop.com', '69319090044', 'User', 'customer'); INSERT IGNORE INTO `products` (`name`, `description`, `price`, `size`, `stock`, `image_url`) VALUES ('เสื้อยืด Oversized Minimalist', 'เสื้อยืดทรงหลวม สไตล์มินิมอล ผลิตจากผ้าฝ้าย 100% สวมใส่สบาย ระบายอากาศได้ดี', 390.00, 'M', 20, 'assets/products/oversized_tshirt.png'), ('กางเกงยีนส์ฟอกทรงกระบอก', 'กางเกงยีนส์ฟอกสีคลาสสิก ทรงกระบอกตรง แมทช์ได้ง่ายกับทุกสไตล์การแต่งตัว', 890.00, 'L', 15, 'assets/products/washed_jeans.png'), ('เสื้อฮู้ดดี้ผ้าหนากันหนาว', 'เสื้อกันหนาวมีฮู้ด ผ้า Fleece เนื้อหนานุ่มพิเศษ ให้ความอบอุ่นได้ดีเยี่ยม ดีไซน์ทันสมัย', 1290.00, 'XL', 10, 'assets/products/heavy_hoodie.png'), ('หมวกแก๊ปสไตล์สตรีท', 'หมวกแก๊ปผ้าแคนวาสปักลายเท่ ปรับขนาดได้ ป้องกันแสงแดดและเสริมลุคสตรีท', 290.00, 'Free Size', 25, 'assets/products/street_cap.png'), ('กระเป๋าเป้สะพายหลังกันน้ำ', 'กระเป๋าเป้สะพายหลังวัสดุกันน้ำ มีช่องใส่แล็ปท็อปและช่องเก็บของอเนกประสงค์หลายช่อง', 1590.00, 'Free Size', 12, 'assets/products/waterproof_backpack.png'), ('รองเท้าสนีกเกอร์คลาสสิก', 'รองเท้าผ้าใบสไตล์คลาสสิก พื้นรองเท้านุ่มรับแรงกระแทกได้ดี เหมาะสำหรับใส่เดินเล่นหรือออกกำลังกาย (หมดสต็อกชั่วคราว)', 2490.00, '42', 0, 'assets/products/classic_sneakers.png'), ('แว่นตากันแดด Retro', 'แว่นตากันแดดทรงวินเทจ ป้องกันรังสี UV400 ถนอมสายตา น้ำหนักเบาใส่สบาย', 490.00, 'Free Size', 8, 'assets/products/retro_sunglasses.png');
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.27 |
proxy
|
phpinfo
|
Settings