开源数据库E-R图绘制工具分享

1. 特点:

可直接使用,无需注册账号
无状态的纯前端工具,数据会存放在浏览器中。设计完成后可将数据保存到本地

2. 使用场景:

描述E-R图,对数据库表关系进行直观分析

3. 效果:

4. 测试数据

用来测试的建表sql:

  1. users - 用户表:存储用户信息。
  2. product_categories - 商品分类表:存储商品的分类信息。
  3. products - 商品表:存储商品详细信息,并关联到商品分类。
  4. orders - 订单表:记录用户的订单摘要信息。
  5. order_items - 订单项目表:一个“连接表”,用于实现订单和商品之间的多对多关系。
  6. 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90305.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓 Audio Thread 分析

一、PlaybackThread::threadLoop_write 1.变量 mFramesWritten 类型: int64_t 作用: 记录从线程启动以来已写入音频设备的帧数&#xff08;不包括挂起状态下的写入&#xff09; mSuspendedFrames 类型: int64_t 作用: 记录线程在挂起&#xff08;suspended&#xff09;状态下模…

JavaWeb_原始项目初识(一)

Students2025项目&#xff08;一&#xff09; 原始ServletJSP架构项目初步搭建 jsp项目已被淘汰&#xff0c;在此学习目的是了解未来学习的新技术的底层原理项目结构&#xff1a;项目结构介绍&#xff1a; 目前阶段只完成了初始化的后端搭建&#xff0c;实现从本地数据库获取数…

前端_CSS复习

文章目录CSS复习1. css三种引入方式1.1 行内样式常用样式&#xff1a;1.2页内样式常见选择器&#xff1a;1. 标记选择器2. id选择器3. 类选择器&#xff08;最常用&#xff09;4. 星号选择器&#xff0c;频率很低5. 复合选择器6. 伪类选择器&#xff1a;7. 子元素伪类1.3引入外…

工业互联网时代,如何通过混合SD-WAN提升煤炭行业智能化网络安全

1. 背景&#xff1a;煤炭行业智能化转型的网络挑战随着工业互联网技术的普及&#xff0c;煤炭行业智能化转型进入加速期。选煤厂作为煤炭生产的核心环节&#xff0c;需要构建一套既安全又高效的网络系统&#xff0c;以满足工业控制系统&#xff08;ICS&#xff09;、智能设备和…

AI浪潮下数据中心的突围者:台达DPH Gen3系列UPS如何重构供电架构

2025年6月13日&#xff0c;台达-中达电通资通讯基础设施事业部联合中国数据中心工作组&#xff08;CDCC&#xff09;在江苏吴江举办"数据中心供配电技术革新与AI算力基础设施未来展望研讨会"&#xff0c;同时开展CDCC专家组工厂参观。盛会汇聚了数据中心行业专家、互…

DiffServ服务模型与DS码点详解

1. DiffServ概述 DiffServ(Differentiated Services&#xff0c;差异化服务)是IETF定义的一种QoS(Quality of Service)体系结构&#xff0c;旨在为IP网络提供可扩展的服务区分能力。与传统的IntServ(集成服务)模型不同&#xff0c;DiffServ采用简单、粗粒度的流量分类机制&…

基于 PIC16 系列的多功能电子烟(温控 + 电压控制 + 多模式)方案

基于 PIC16 系列的多功能电子烟&#xff08;温控 电压控制 多模式&#xff09;方案 一、芯片与最小系统推荐型号&#xff1a;PIC16F18313/18323 8-bit 内核&#xff0c;14/20-pin 小封装&#xff0c;成本低28 MHz 内部振荡&#xff0c;带 10-bit ADC&#xff08;12 通道&…

小模数齿轮的加工方法有哪些?

小模数齿轮(一般指0.3≤Mn≤1)的加工方法有哪些呢&#xff1f;小模数齿轮的加工方法主要分为减材、增材、变形加工三类&#xff1a; 去材料制造 有铣齿、滚齿、插齿、刨齿、剃齿、拉齿、冲齿、研磨、珩齿、磨齿及其抛光、线切割等。 增材制造 有注塑&#xff08;塑料、尼龙&…

若依前后端分离版学习笔记(二)——系统菜单介绍

前言&#xff1a; 这一节是将ruoyi的前端界面过一遍&#xff0c;查看所有系统菜单及页面功能&#xff0c;为后续代码学习做准备。&#xff08;注意&#xff1a;文中包含大量截图&#xff0c;截图为从本地启动的3.9.0 vue3的前端界面。&#xff09; 一 系统管理 1 用户管理 主要…

VRRP技术-设备备份技术

一、VRRP的概念及应用场景1.定义在 VRRP&#xff08;虚拟路由冗余协议&#xff09;中&#xff0c;将多个路由器逻辑上看作一个路由器时所使用的虚拟 IP 地址&#xff0c;需要满足以下要求&#xff1a;这个虚拟 IP 地址必须与该 VRRP 组内所有物理路由器的接口 IP 地址处于同一网…

VUE2 学习笔记5 动态绑定class、条件渲染、列表过滤与排序

动态绑定class样式&#xff1a;先设置css&#xff1a;<style>.styleBackgroundColor{background-color: aqua;}.styleContent{width:300px;height: 200px;}.styleBorder{border: 2px black solid;}</style>vue模版中&#xff0c;使用动态类名绑定&#xff0c;一般可…

推客系统全栈开发指南:从架构设计到高并发实战

一、推客系统概述与市场前景推客系统&#xff08;也称为"推客营销系统"或"社交电商系统"&#xff09;是近年来快速崛起的社交化营销工具&#xff0c;它通过整合社交网络与电子商务功能&#xff0c;让每个用户都能成为产品的推广者并获得相应奖励。市场数据…

RabbitMQ有多少种Exchange?

面试回答模板 “RabbitMQ 在 AMQP 协议中预定义了 四种常用交换机 两种特殊类型&#xff0c;共 6 种&#xff1a; Direct&#xff1a;routing-key 全等匹配&#xff1b;Fanout &#xff1a;广播&#xff0c;忽略 key&#xff1b;Topic&#xff1a;按 *.# 通配符匹配&#xff1…

ctfshow pwn43

1. 分析程序首先检查程序相关保护&#xff0c;发现程序为32位且只开启了一个NX保护checksec pwn使用IDA进行逆向分析代码&#xff0c;查看漏洞触发点&#xff1a;在main函数中&#xff0c;有一个ctfshow函数&#xff0c;这里我们跟进ctfshow()发现存在一个gets()函数&#xff0…

内网IM:BeeWorks私有化部署的安全通讯解决方案

在当今数字化办公环境中&#xff0c;内网IM已成为企业保障数据安全的核心工具。BeeWorks作为一款支持私有化部署的内网IM解决方案&#xff0c;能够帮助企业构建完全自主可控的通讯系统。无论是政府机构、金融机构&#xff0c;还是对数据安全要求极高的企业&#xff0c;BeeWorks…

SHA512算法详解

SHA-512 是 SHA-2&#xff08;Secure Hash Algorithm 2&#xff09;系列密码散列函数的重要成员&#xff0c;由美国国家安全局&#xff08;NSA&#xff09;设计&#xff0c;2001 年被纳入 NIST&#xff08;美国国家标准与技术研究院&#xff09;的 FIPS 180 标准&#xff0c;后…

通过python管理vcenter中的虚拟机

通过python管理vcenter中的虚拟机因业务需要&#xff0c;需在夜间关闭虚拟机&#xff0c;随通过计划任务远程管理开机、关机虚拟机一、通过docker配置python3.9环境 Dockerfile FROM python:3.9 RUN pip3 install pyvmomi7.0.0创建自定义镜像 docker build -t pyvmomi7:v1 .二…

AWS S3 生命周期管理最佳实践:IoT Core 日志的智能存储优化

在现代物联网应用中,设备日志数据的管理是一个重要挑战。随着设备数量的增长,日志数据量呈指数级增长,如何有效管理这些数据的存储成本成为关键问题。本文将分享如何为 AWS IoT Core 日志实施智能生命周期管理策略。 背景与挑战 IoT 设备产生的日志数据具有以下特点: 数据…

18.TaskExecutor获取ResourceManagerGateway

TaskExecutor获取ResourceManagerGatewayTaskExecutor 与 ResourceManager 之间的交互机制较为复杂&#xff0c;核心可以拆分为三个阶段&#xff1a; 首次发现与注册连接建立心跳维持 本文聚焦连接建立阶段&#xff0c;详细分析底层 RPC 连接的实现原理。回顾&#xff1a;start…

kafka查看消息的具体内容 kafka-dump-log.sh

目录kafka 消息查看1. 直接查看日志文件内容步骤&#xff1a;2. 使用 Kafka 工具查看日志主要参数说明常用命令&#xff1a;输出说明&#xff1a;3. 注意事项kafka 消息日志文件详解我们有时候遇到这样的需求&#xff0c;需要查看下kafka消息的内容。 kafka 消息查看 查看 Ka…