1. 特點:
可直接使用,無需注冊賬號
無狀態的純前端工具,數據會存放在瀏覽器中。設計完成后可將數據保存到本地
2. 使用場景:
描述E-R圖,對數據庫表關系進行直觀分析
3. 效果:
4. 測試數據
用來測試的建表sql:
- users - 用戶表:存儲用戶信息。
- product_categories - 商品分類表:存儲商品的分類信息。
- products - 商品表:存儲商品詳細信息,并關聯到商品分類。
- orders - 訂單表:記錄用戶的訂單摘要信息。
- order_items - 訂單項目表:一個“連接表”,用于實現訂單和商品之間的多對多關系。
- product_reviews - 商品評論表:用戶可以對購買過的商品進行評論。
-- 設置默認的存儲引擎為 InnoDB,并使用 utf8mb4 字符集以支持各種字符,包括 Emoji
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- 1. 用戶表 (users)
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用戶ID',`username` VARCHAR(50) NOT NULL COMMENT '用戶名',`email` VARCHAR(100) NOT NULL COMMENT '電子郵箱',`password_hash` VARCHAR(255) NOT NULL COMMENT '哈希后的密碼',`full_name` VARCHAR(100) NULL COMMENT '用戶全名',`registration_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注冊時間',`last_login` DATETIME NULL COMMENT '最后登錄時間',PRIMARY KEY (`id`),UNIQUE KEY `uk_username` (`username`),UNIQUE KEY `uk_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用戶表';-- ----------------------------
-- 2. 商品分類表 (product_categories)
-- ----------------------------
DROP TABLE IF EXISTS `product_categories`;
CREATE TABLE `product_categories` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分類ID',`name` VARCHAR(100) NOT NULL COMMENT '分類名稱',`parent_id` INT UNSIGNED NULL COMMENT '父分類ID,用于實現多級分類',`description` TEXT NULL COMMENT '分類描述',PRIMARY KEY (`id`),UNIQUE KEY `uk_name` (`name`),KEY `idx_parent_id` (`parent_id`),CONSTRAINT `fk_parent_category` FOREIGN KEY (`parent_id`) REFERENCES `product_categories` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品分類表';-- ----------------------------
-- 3. 商品表 (products)
-- ----------------------------
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '商品ID',`category_id` INT UNSIGNED NOT NULL COMMENT '所屬分類ID',`sku` VARCHAR(100) NOT NULL COMMENT '商品SKU (Stock Keeping Unit)',`name` VARCHAR(255) NOT NULL COMMENT '商品名稱',`description` TEXT NULL COMMENT '商品詳細描述',`price` DECIMAL(10, 2) NOT NULL COMMENT '商品單價',`stock_quantity` INT NOT NULL DEFAULT 0 COMMENT '庫存數量',`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新時間',PRIMARY KEY (`id`),UNIQUE KEY `uk_sku` (`sku`),KEY `idx_name` (`name`),CONSTRAINT `fk_product_category` FOREIGN KEY (`category_id`) REFERENCES `product_categories` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品表';-- ----------------------------
-- 4. 訂單表 (orders)
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '訂單ID',`user_id` INT UNSIGNED NOT NULL COMMENT '用戶ID',`order_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下單時間',`status` ENUM('pending', 'paid', 'shipped', 'delivered', 'cancelled') NOT NULL DEFAULT 'pending' COMMENT '訂單狀態',`total_amount` DECIMAL(12, 2) NOT NULL COMMENT '訂單總金額',`shipping_address` TEXT NOT NULL COMMENT '收貨地址',`notes` VARCHAR(500) NULL COMMENT '訂單備注',PRIMARY KEY (`id`),KEY `idx_user_id` (`user_id`),KEY `idx_status` (`status`),CONSTRAINT `fk_order_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='訂單表';-- ----------------------------
-- 5. 訂單項目表 (order_items) - 連接表
-- ----------------------------
DROP TABLE IF EXISTS `order_items`;
CREATE TABLE `order_items` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '訂單項目ID',`order_id` BIGINT UNSIGNED NOT NULL COMMENT '所屬訂單ID',`product_id` INT UNSIGNED NOT NULL COMMENT '商品ID',`quantity` INT UNSIGNED NOT NULL COMMENT '購買數量',`price_per_unit` DECIMAL(10, 2) NOT NULL COMMENT '購買時的單價 (快照)',PRIMARY KEY (`id`),UNIQUE KEY `uk_order_product` (`order_id`, `product_id`), -- 一個訂單中一個商品只能有一條記錄CONSTRAINT `fk_item_order` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_item_product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='訂單項目表 (多對多連接)';-- ----------------------------
-- 6. 商品評論表 (product_reviews)
-- ----------------------------
DROP TABLE IF EXISTS `product_reviews`;
CREATE TABLE `product_reviews` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '評論ID',`product_id` INT UNSIGNED NOT NULL COMMENT '商品ID',`user_id` INT UNSIGNED NOT NULL COMMENT '用戶ID',`rating` TINYINT UNSIGNED NOT NULL COMMENT '評分 (1-5)',`comment` TEXT NULL COMMENT '評論內容',`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '評論時間',PRIMARY KEY (`id`),UNIQUE KEY `uk_user_product_review` (`user_id`, `product_id`), -- 每個用戶對一個商品只能評論一次CONSTRAINT `fk_review_product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_review_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `chk_rating` CHECK ((`rating` >= 1 and `rating` <= 5)) -- 檢查約束,確保評分在1-5之間
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品評論表';SET FOREIGN_KEY_CHECKS = 1;
示例數據sql:
-- 開始插入數據,暫時禁用外鍵檢查,方便按任意順序插入,最后再開啟
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- 1. `users` 表的示例數據
-- ----------------------------
INSERT INTO `users` (`id`, `username`, `email`, `password_hash`, `full_name`, `registration_date`, `last_login`) VALUES
(1, 'alice', 'alice@example.com', 'sha256_hash_value_placeholder_1', 'Alice Smith', '2024-01-15 10:30:00', '2025-07-20 09:15:00'),
(2, 'bob', 'bob@example.com', 'sha256_hash_value_placeholder_2', 'Bob Johnson', '2024-02-20 11:00:00', '2025-07-21 18:30:00'),
(3, 'charlie', 'charlie@example.com', 'sha256_hash_value_placeholder_3', 'Charlie Brown', '2024-03-10 16:45:00', '2025-07-22 14:00:00'),
(4, 'diana', 'diana@example.com', 'sha256_hash_value_placeholder_4', 'Diana Prince', '2024-04-05 20:00:00', '2025-07-19 11:45:00'),
(5, 'ethan', 'ethan@example.com', 'sha256_hash_value_placeholder_5', 'Ethan Hunt', '2024-05-01 12:00:00', NULL);-- ----------------------------
-- 2. `product_categories` 表的示例數據 (包含層級關系)
-- ----------------------------
INSERT INTO `product_categories` (`id`, `name`, `parent_id`, `description`) VALUES
(1, '電子產品', NULL, '所有消費類電子產品'),
(2, '圖書音像', NULL, '書籍、音樂和電影'),
(3, '家居生活', NULL, '提升生活品質的家居用品'),
(4, '電腦及配件', 1, '筆記本、臺式機以及相關配件'),
(5, '手機通訊', 1, '智能手機和相關配件'),
(6, '科幻小說', 2, '探索未來與宇宙的文學作品');-- ----------------------------
-- 3. `products` 表的示例數據
-- ----------------------------
INSERT INTO `products` (`id`, `category_id`, `sku`, `name`, `description`, `price`, `stock_quantity`, `created_at`, `updated_at`) VALUES
(1, 4, 'COM-LP-MBP16', '16英寸 MacBook Pro', '強大的M4 Pro芯片,適用于專業人士。', 18999.00, 50, '2024-08-01 10:00:00', '2024-08-01 10:00:00'),
(2, 4, 'COM-LP-TPX1', 'ThinkPad X1 Carbon', '超輕薄商務筆記本,性能卓越。', 12500.00, 80, '2024-08-02 11:00:00', '2024-08-02 11:00:00'),
(3, 5, 'CEL-PH-IP16', 'iPhone 16 Pro', '全新的設計,更強的攝像頭系統。', 9999.00, 120, '2024-09-15 09:00:00', '2024-09-15 09:00:00'),
(4, 5, 'CEL-PH-PIX9', 'Google Pixel 9', '純凈安卓體驗,AI攝影大師。', 6999.00, 150, '2024-10-01 14:00:00', '2024-10-01 14:00:00'),
(5, 6, 'BOK-SF-3BODY', '《三體》全集', '劉慈欣著,中國科幻的里程碑之作。', 98.00, 500, '2024-01-10 16:00:00', '2024-01-10 16:00:00'),
(6, 6, 'BOK-SF-DUNE', '《沙丘》', '弗蘭克·赫伯特著,科幻史詩巨著。', 128.00, 300, '2024-02-15 17:00:00', '2024-02-15 17:00:00'),
(7, 3, 'HOM-LT-SMLMP', '智能護眼臺燈', '可調節色溫和亮度,支持App控制。', 299.00, 200, '2024-06-20 18:00:00', '2024-06-20 18:00:00'),
(8, 3, 'HOM-AP-CFMKR', '全自動咖啡機', '一鍵制作拿鐵、卡布奇諾。', 1599.00, 60, '2024-07-01 11:30:00', '2024-07-01 11:30:00');-- ----------------------------
-- 4. `orders` 表的示例數據 (total_amount 初始為 0, 稍后更新)
-- ----------------------------
INSERT INTO `orders` (`id`, `user_id`, `order_date`, `status`, `total_amount`, `shipping_address`, `notes`) VALUES
(1001, 1, '2025-06-10 14:25:10', 'delivered', 0.00, '上海市浦東新區世紀大道1號', '請盡快發貨'),
(1002, 2, '2025-07-15 09:30:05', 'shipped', 0.00, '北京市海淀區中關村南大街1號', '工作日派送'),
(1003, 1, '2025-07-18 20:10:00', 'paid', 0.00, '上海市浦東新區世紀大道1號', NULL),
(1004, 3, '2025-07-20 11:45:30', 'delivered', 0.00, '廣東省深圳市南山區科技園路1號', '包裹請放快遞柜'),
(1005, 4, '2025-07-24 18:00:00', 'pending', 0.00, '浙江省杭州市余杭區文一西路969號', '需要禮品包裝');-- ----------------------------
-- 5. `order_items` 表的示例數據 (連接訂單和商品)
-- ----------------------------
INSERT INTO `order_items` (`id`, `order_id`, `product_id`, `quantity`, `price_per_unit`) VALUES
-- 訂單 1001 (Alice)
(1, 1001, 1, 1, 18999.00), -- 1x MacBook Pro
(2, 1001, 5, 1, 98.00), -- 1x 《三體》
-- 訂單 1002 (Bob)
(3, 1002, 4, 2, 6999.00), -- 2x Pixel 9
(4, 1002, 8, 1, 1599.00), -- 1x 咖啡機
-- 訂單 1003 (Alice)
(5, 1003, 7, 1, 299.00), -- 1x 智能臺燈
-- 訂單 1004 (Charlie)
(6, 1004, 2, 1, 12500.00), -- 1x ThinkPad X1
(7, 1004, 6, 1, 128.00), -- 1x 《沙丘》
-- 訂單 1005 (Diana)
(8, 1005, 3, 1, 9999.00); -- 1x iPhone 16 Pro-- ----------------------------
-- 6. `product_reviews` 表的示例數據
-- ----------------------------
INSERT INTO `product_reviews` (`id`, `product_id`, `user_id`, `rating`, `comment`, `created_at`) VALUES
(1, 1, 1, 5, '性能非常強大,屏幕效果驚艷,物超所值!', '2025-06-20 10:00:00'),
(2, 2, 3, 4, '鍵盤手感一流,非常適合長時間打字。電池續航希望能再好一點。', '2025-07-23 15:00:00'),
(3, 5, 1, 5, '讀完之后非常震撼,不愧是神作!', '2025-06-25 19:30:00'),
(4, 8, 2, 3, '咖啡味道還不錯,但機器噪音有點大。', '2025-07-22 08:00:00');-- ----------------------------
-- 7. 更新 `orders` 表的 `total_amount`
-- 這是一個非常真實的操作:訂單總價由其所有項目的總和決定
-- ----------------------------
UPDATE `orders` o
SET o.total_amount = (SELECT SUM(oi.quantity * oi.price_per_unit)FROM `order_items` oiWHERE oi.order_id = o.id
)
WHERE o.id IN (1001, 1002, 1003, 1004, 1005);-- 重新開啟外鍵檢查,確保數據完整性
SET FOREIGN_KEY_CHECKS = 1;
該項目支持在線編輯、修改和導入導出...博主淺淺試了下,感覺功能相當強大,給作者狠狠點贊了👍
大家感興趣可以去看看,下面是項目地址:
5. 項目地址:
官網地址:https://www.drawdb.app/
Github地址:https://github.com/drawdb-io/drawdb