# 第三章 系统设计 ## 3.1 数据库设计 系统采用PostgreSQL作为主数据库,通过Prisma ORM进行数据建模和访问。数据库设计遵循第三范式,确保数据的一致性和完整性,同时考虑了系统的性能需求和扩展性要求。 用户表(users)是系统的核心表之一,存储所有用户的基本信息和权限信息。主键id采用cuid()函数生成的唯一标识符,确保全局唯一性。email字段定义为唯一约束的变长字符串,作为用户登录的主要标识。username字段同样设置唯一约束,提供用户的显示名称。password字段存储经过bcrypt加密的用户密码,确保密码安全性。name、phone、address字段为可选字段,存储用户的详细信息。isAdmin字段为布尔类型,默认值为false,用于区分普通用户和管理员。createdAt和updatedAt字段分别记录用户的创建时间和最后更新时间,支持自动时间戳更新。 配件类型表(component_types)定义了电脑配件的分类信息。主键id采用cuid()生成,name字段存储配件类型名称并设置唯一约束,确保类型名称的唯一性。description字段为可选字段,提供类型的详细描述信息。该表为配件分类提供基础数据支持。 配件表(components)是系统最重要的业务表之一,存储所有电脑配件的详细信息。主键id采用cuid()生成,name字段存储配件名称,brand字段存储配件品牌,model字段存储配件型号。price字段采用浮点数类型存储配件价格,支持精确的价格计算。description和imageUrl字段为可选字段,分别存储配件描述和图片URL。stock字段为整型,默认值为0,实时反映配件的库存数量。specifications字段采用字符串类型存储JSON格式的规格参数,提供灵活的参数定义能力。componentTypeId字段为外键,关联配件类型表,建立配件与类型的归属关系。createdAt和updatedAt字段记录配件的创建和更新时间。 订单表(orders)记录用户的购买订单信息。主键id采用cuid()生成,orderNumber字段存储唯一的订单号,便于订单查询和管理。totalAmount字段采用浮点数存储订单总金额。status字段采用枚举类型,支持PENDING(待确认)、CONFIRMED(已确认)、PROCESSING(处理中)、SHIPPED(已发货)、DELIVERED(已送达)、CANCELLED(已取消)等状态,默认为PENDING状态。userId字段为外键,关联用户表,建立订单与用户的归属关系。createdAt和updatedAt字段记录订单的创建和更新时间,支持订单时间追踪。 订单项表(order_items)是订单和配件之间的关联表,记录订单中每个配件的详细信息。主键id采用cuid()生成,quantity字段为整型,默认值为1,记录配件的购买数量。price字段记录配件的实际成交价格,避免因价格变动导致的历史订单金额不准确。orderId字段为外键,关联订单表,并设置级联删除约束,确保订单删除时相关订单项同时删除。componentId字段为外键,关联配件表,建立订单项与配件的关系。 购物车项表(cart_items)实现了基于数据库的购物车功能,支持用户在不同设备间的购物车同步。主键id采用cuid()生成,quantity字段记录配件的购买数量,默认值为1。userId字段为外键,关联用户表,并设置级联删除约束,确保用户删除时购物车数据同时清理。componentId字段为外键,关联配件表,并设置级联删除约束,确保配件删除时相关购物车项同时清理。createdAt和updatedAt字段记录购物车项的创建和更新时间。重要的是,userId和componentId字段组合设置唯一约束,确保一个用户对同一商品只能有一条购物车记录,避免数据冗余。 数据库设计还包含了完善的索引策略。用户表的email和username字段设置唯一索引,提升登录验证的查询性能。配件表的componentTypeId字段设置普通索引,优化按类型查询配件的性能。订单表的userId字段设置索引,提升用户订单查询的效率。外键约束确保了引用完整性,防止孤立数据的产生。 ## 3.2 模块设计 系统采用模块化架构设计,将复杂的业务逻辑分解为相互独立且高内聚的功能模块。每个模块负责特定的业务领域,通过明确定义的接口进行交互,确保系统的可维护性和可扩展性。 用户认证模块是系统安全的核心模块,负责处理用户的注册、登录、权限验证和会话管理。该模块采用JWT令牌机制实现无状态认证,支持跨域访问和分布式部署。用户注册流程首先验证用户输入信息的合法性,包括邮箱格式验证、用户名唯一性检查和密码强度验证。密码采用bcrypt算法进行单向加密,盐值随机生成,确保即使数据库泄露也无法逆向获取原始密码。用户登录流程验证用户凭据的正确性,成功后生成包含用户信息的JWT令牌,设置合理的过期时间以平衡安全性和用户体验。 **[用户认证流程图占位符]** 商品管理模块负责电脑配件的展示、检索和管理功能。该模块支持配件的分类浏览、关键词搜索、价格筛选和品牌过滤等多种检索方式。配件详情页面展示配件的完整信息,包括规格参数、库存状态、用户评价等。管理员可以通过该模块进行配件的增删改查操作,支持批量操作和数据导入导出功能。库存管理功能实时监控配件库存,支持库存预警和自动补货提醒。 购物车模块实现了基于数据库的购物车功能,相比传统的本地存储方案,提供了更好的数据持久性和跨设备同步能力。用户可以在任意页面将感兴趣的配件添加到购物车,系统自动检查库存可用性并更新购物车状态。购物车支持商品数量的实时调整,价格计算自动更新,提供直观的购物体验。结算流程集成了配件兼容性检查功能,确保用户选择的配件能够正常组装使用。 订单管理模块处理从订单创建到订单完成的全生命周期管理。订单创建流程首先验证购物车数据的有效性,检查库存充足性,计算订单总金额,生成唯一订单号,并将购物车商品转换为订单项。订单状态管理支持多种业务状态,管理员可以根据实际业务进度更新订单状态,用户可以实时查看订单处理进度。订单查询功能支持多维度检索,包括订单号查询、时间范围查询、状态筛选等。 **[订单处理流程图占位符]** 装机方案模块是系统的特色功能模块,为用户提供智能化的电脑配置方案定制服务。用户可以从每种配件类型中选择一个产品,系统会实时计算总价格并检查配件间的兼容性。兼容性检查算法考虑了主板与CPU的接口匹配、内存类型与主板的兼容性、显卡尺寸与机箱空间的匹配等关键因素。用户确认配置方案后,可以一键将所有配件添加到购物车或直接提交订单,大大简化了DIY装机的复杂性。 数据统计模块为系统提供了强大的商业智能分析能力。该模块定期分析用户消费行为、商品销售数据、订单趋势等关键业务指标。用户消费排行统计按照消费金额对用户进行排序,识别高价值客户群体,为精准营销提供数据支持。商品销售排行统计按照销量对配件进行排序,为库存管理和采购决策提供参考依据。统计结果通过图表形式直观展示,支持多种图表类型包括柱状图、饼图、折线图等,满足不同的数据展示需求。 系统集成模块负责各功能模块间的协调和通信,提供统一的API接口和数据交换格式。该模块采用RESTful API设计规范,支持标准的HTTP方法和状态码,确保接口的规范性和易用性。数据传输采用JSON格式,支持请求参数验证和响应数据格式化。错误处理机制提供统一的错误码和错误信息,便于前端进行错误处理和用户提示。 安全防护模块贯穿系统的各个层面,提供全方位的安全保障。输入验证功能防止SQL注入、XSS攻击等常见安全威胁。API访问控制基于JWT令牌进行身份验证和权限授权,确保只有合法用户能够访问相应资源。数据加密功能对敏感信息进行加密存储和传输,保护用户隐私和商业机密。访问日志记录用户的关键操作,支持安全审计和异常行为分析。