以下是使用 MySQL 创建商品表(Product)及其关联的商品类别表(Category)的 SQL 语句:

sql
复制代码
-- 创建商品类别表
CREATE TABLE Category (
    CategoryID INT AUTO_INCREMENT PRIMARY KEY, -- 商品类别ID(主键)
    CategoryName VARCHAR(255) NOT NULL         -- 商品类别名称
);

-- 创建商品表
CREATE TABLE Product (
    ProductID INT AUTO_INCREMENT PRIMARY KEY,         -- 商品ID(主键)
    ProductName VARCHAR(255) NOT NULL,                -- 商品名称
    Description TEXT,                                 -- 商品描述
    CategoryID INT,                                   -- 商品类别ID(外键)
    Price DECIMAL(10, 2) NOT NULL,                    -- 商品价格
    Stock INT NOT NULL,                               -- 商品库存数量
    ImageURL VARCHAR(255),                            -- 商品图片链接
    Specification TEXT,                               -- 商品规格
    ListedTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 商品上架时间
    FOREIGN KEY (CategoryID) REFERENCES Category(CategoryID) -- 外键约束
);


-- 创建用户角色表
CREATE TABLE Role (
    RoleID INT AUTO_INCREMENT PRIMARY KEY,   -- 用户角色ID(主键)
    RoleName VARCHAR(100) NOT NULL           -- 用户角色名称(如买家、卖家、管理员)
);

-- 创建用户表
CREATE TABLE User (
    UserID INT AUTO_INCREMENT PRIMARY KEY,         -- 用户ID(主键)
    UserName VARCHAR(100) NOT NULL,                -- 用户名
    Password VARCHAR(255) NOT NULL,                -- 用户密码
    Email VARCHAR(255) UNIQUE NOT NULL,            -- 用户邮箱(唯一约束)
    PhoneNumber VARCHAR(15) UNIQUE NOT NULL,       -- 用户手机号(唯一约束)
    RegistrationTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 注册时间,默认为当前时间
    RoleID INT NOT NULL,                           -- 用户角色ID(外键)
    FOREIGN KEY (RoleID) REFERENCES Role(RoleID)   -- 外键约束,指向Role表
);

-- 创建订单状态表
CREATE TABLE OrderStatus (
    OrderStatusID INT AUTO_INCREMENT PRIMARY KEY,   -- 订单状态ID(主键)
    StatusName VARCHAR(100) NOT NULL               -- 状态名称(如未支付、已支付、已发货、已完成)
);

-- 创建支付方式表
CREATE TABLE PaymentMethod (
    PaymentMethodID INT AUTO_INCREMENT PRIMARY KEY, -- 支付方式ID(主键)
    MethodName VARCHAR(100) NOT NULL               -- 支付方式名称(如支付宝、微信支付、信用卡)
);

-- 创建订单表
CREATE TABLE `Order` (
    OrderID INT AUTO_INCREMENT PRIMARY KEY,         -- 订单ID(主键)
    UserID INT NOT NULL,                            -- 用户ID(外键)
    OrderStatusID INT NOT NULL,                     -- 订单状态ID(外键)
    PaymentMethodID INT NOT NULL,                   -- 支付方式ID(外键)
    PaymentTime DATETIME,                           -- 支付时间
    ShipmentTime DATETIME,                          -- 发货时间
    DeliveryTime DATETIME,                          -- 收货时间
    Amount DECIMAL(10, 2) NOT NULL,                 -- 支付金额
    FOREIGN KEY (UserID) REFERENCES User(UserID),   -- 外键约束,指向User表
    FOREIGN KEY (OrderStatusID) REFERENCES OrderStatus(OrderStatusID), -- 外键约束,指向OrderStatus表
    FOREIGN KEY (PaymentMethodID) REFERENCES PaymentMethod(PaymentMethodID) -- 外键约束,指向PaymentMethod表
);

-- 订单-商品中间表
CREATE TABLE Order_Product (
    OrderID INT NOT NULL ,
    ProductID INT NOT NULL,
    Quantity INT NOT NULL,
    PRIMARY KEY (OrderID, ProductID),
    FOREIGN KEY (OrderID) REFERENCES `Order` (OrderID),
    FOREIGN KEY (ProductID) REFERENCES Product(ProductID)
);
-- 创建物流状态表
CREATE TABLE LogisticsStatus (
    LogisticsStatusID INT AUTO_INCREMENT PRIMARY KEY,  -- 物流状态ID(主键)
    StatusName VARCHAR(100) NOT NULL                  -- 物流状态名称(如已发货、运输中、已送达)
);

-- 创建物流表
CREATE TABLE Logistics (
    LogisticsID INT AUTO_INCREMENT PRIMARY KEY,           -- 物流ID(主键)
    OrderID INT NOT NULL,                                 -- 订单ID(外键)
    LogisticsCompany VARCHAR(255) NOT NULL,              -- 物流公司
    TrackingNumber VARCHAR(255) NOT NULL UNIQUE,          -- 物流追踪号码(唯一约束)
    ShipmentTime DATETIME NOT NULL,                      -- 发货时间
    EstimatedArrival DATETIME NOT NULL,                  -- 预计到达时间
    LogisticsStatusID INT NOT NULL,                      -- 物流状态ID(外键)
    FOREIGN KEY (OrderID) REFERENCES `Order`(OrderID),    -- 外键约束,指向Order表
    FOREIGN KEY (LogisticsStatusID) REFERENCES LogisticsStatus(LogisticsStatusID) -- 外键约束,指向LogisticsStatus表
);

插入物流状态数据:

sql
复制代码
INSERT INTO LogisticsStatus (StatusName)
VALUES
('已发货'),
('运输中'),
('已送达');

插入角色数据:


INSERT INTO Role (RoleName) VALUES ('买家'), ('卖家'), ('管理员');


INSERT INTO Category (CategoryName) VALUES ('电子产品'), ('家居用品'), ('服饰'),VALUES ('图书');