第3课_数据库设计与实现
热度🔥:30 免费课程
授课语音
商城项目设计数据库,创建商品、订单、用户等核心数据表
在商城项目中,数据库设计是至关重要的一部分,合理的数据库设计能够有效提高系统的性能和可维护性。本文将介绍如何设计商城项目的核心数据表,包括商品表、订单表和用户表,重点介绍表结构、字段设计和常见的关系。
1. 商品表(Product)
商品表主要存储商城中所有商品的基本信息,如商品名称、价格、库存、描述等。设计时需要考虑数据的一致性和查询的高效性。
商品表设计:
CREATE TABLE `product` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY, -- 商品ID,主键,自增长
`name` VARCHAR(255) NOT NULL, -- 商品名称
`description` TEXT, -- 商品描述
`price` DECIMAL(10, 2) NOT NULL, -- 商品价格,精度为10,保留2位小数
`stock` INT NOT NULL DEFAULT 0, -- 库存数量
`category_id` BIGINT, -- 商品分类ID(外键)
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);
代码案例:
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 商品ID
private String name; // 商品名称
private String description; // 商品描述
private BigDecimal price; // 商品价格
private Integer stock; // 库存数量
private Long categoryId; // 商品分类ID
private LocalDateTime createdAt; // 创建时间
private LocalDateTime updatedAt; // 更新时间
// 省略getter和setter方法
}
代码解释:
@Entity
注解表明这是一个JPA实体类。@Id
表示该字段是主键,@GeneratedValue
表示主键自动生成。- 使用
BigDecimal
类型来处理商品的价格,避免浮点数精度丢失。 LocalDateTime
用于存储时间戳,保证创建和更新的准确性。
2. 订单表(Order)
订单表存储用户提交的订单信息,包括订单号、订单状态、商品信息、订单金额等。
订单表设计:
CREATE TABLE `order` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY, -- 订单ID
`order_number` VARCHAR(50) UNIQUE NOT NULL, -- 订单号,唯一
`user_id` BIGINT, -- 用户ID(外键)
`status` VARCHAR(50) DEFAULT 'PENDING', -- 订单状态(例如:待支付、已完成等)
`total_amount` DECIMAL(10, 2) NOT NULL, -- 订单总金额
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);
代码案例:
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 订单ID
private String orderNumber; // 订单号
private Long userId; // 用户ID
private String status; // 订单状态
private BigDecimal totalAmount; // 订单总金额
private LocalDateTime createdAt; // 创建时间
private LocalDateTime updatedAt; // 更新时间
// 省略getter和setter方法
}
代码解释:
order_number
字段用来生成唯一的订单号,使用VARCHAR(50)
类型。status
字段表示订单的状态,默认为PENDING
(待支付)。total_amount
使用BigDecimal
类型,确保金额计算的精确性。
3. 用户表(User)
用户表存储商城系统的用户信息,包括用户名、密码、联系方式等。对于敏感信息如密码,需要加密存储。
用户表设计:
CREATE TABLE `user` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY, -- 用户ID
`username` VARCHAR(100) UNIQUE NOT NULL, -- 用户名,唯一
`password` VARCHAR(255) NOT NULL, -- 密码(加密后)
`email` VARCHAR(100), -- 邮箱
`phone` VARCHAR(20), -- 手机号码
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);
代码案例:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 用户ID
private String username; // 用户名
private String password; // 密码
private String email; // 邮箱
private String phone; // 手机号码
private LocalDateTime createdAt; // 创建时间
private LocalDateTime updatedAt; // 更新时间
// 省略getter和setter方法
}
代码解释:
- 用户表中
password
字段需要加密存储,可以使用如BCrypt
等加密算法处理。 username
字段设为唯一,以确保每个用户有唯一的用户名。
4. 表间关系
- 商品表和订单表之间通过订单商品关联表实现多对多的关系。
- 用户表和订单表之间是多对一的关系,一个用户可以有多个订单。
结语
通过合理的数据库表设计,我们可以在商城项目中有效地管理商品、订单和用户数据。设计时要考虑数据的一致性、查询效率以及可扩展性,尤其是大规模的商城系统,良好的数据库设计将直接影响系统的性能与稳定性。