You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:如何将UML类图转换为数据表?

UML类图转数据表实操方案

先看你提供的UML类图:
UML类图

下面按照类图里的结构,一步步把每个类转换成数据库表,同时处理类之间的关联关系:

基础转换规则

  • 每个UML类对应一张数据库表,类名转成小写下划线格式(比如User→user)
  • 类的属性直接对应表的字段,属性名同样转小写下划线,属性类型匹配对应数据库类型(比如字符串用VARCHAR,日期用DATETIME)
  • 每个表默认加自增主键(或用类里的唯一标识字段当主键)
  • 关联关系通过外键实现,一对多在“多”的一方加外键,多对多拆成两个一对多+中间表

逐个类转换数据表

1. User 类 → user 表

CREATE TABLE user (
    user_id VARCHAR(36) PRIMARY KEY, -- 用UUID或自增INT,根据需求选
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL, -- 注意加密存储
    phone_number VARCHAR(20)
);
  • 关联:User和Address、PaymentMethod、Order都是一对多,所以这三个表都要加user_id外键指向本表。

2. Address 类 → address 表

CREATE TABLE address (
    address_id INT AUTO_INCREMENT PRIMARY KEY,
    street VARCHAR(255) NOT NULL,
    city VARCHAR(100) NOT NULL,
    state VARCHAR(100) NOT NULL,
    zip_code VARCHAR(20) NOT NULL,
    country VARCHAR(100) NOT NULL,
    user_id VARCHAR(36) NOT NULL,
    FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE
);
  • 外键user_id关联User,ON DELETE CASCADE表示删除用户时自动删除其关联地址。

3. PaymentMethod 类 → payment_method 表

CREATE TABLE payment_method (
    payment_id INT AUTO_INCREMENT PRIMARY KEY,
    card_number VARCHAR(20) NOT NULL, -- 建议加密存储
    expiration_date VARCHAR(7) NOT NULL, -- 格式如"2025-12"
    cvv VARCHAR(4) NOT NULL, -- 建议加密存储
    user_id VARCHAR(36) NOT NULL,
    FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE
);

4. Order 类 → customer_order 表(避免用关键字order)

CREATE TABLE customer_order (
    order_id VARCHAR(36) PRIMARY KEY,
    order_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    total_amount DECIMAL(10,2) NOT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'pending', -- 可选值:pending/shipped/delivered等
    user_id VARCHAR(36) NOT NULL,
    shipping_address_id INT NOT NULL,
    billing_address_id INT NOT NULL,
    payment_method_id INT NOT NULL,
    FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE,
    FOREIGN KEY (shipping_address_id) REFERENCES address(address_id),
    FOREIGN KEY (billing_address_id) REFERENCES address(address_id),
    FOREIGN KEY (payment_method_id) REFERENCES payment_method(payment_id)
);
  • 这里Order关联了两个Address(收货/账单),所以加两个外键分别指向Address表。

5. OrderItem 类 → order_item 表(处理Order和Product的多对多关联)

CREATE TABLE order_item (
    order_item_id INT AUTO_INCREMENT PRIMARY KEY,
    quantity INT NOT NULL DEFAULT 1,
    price_at_purchase DECIMAL(10,2) NOT NULL, -- 记录下单时的价格,避免商品价格变动影响历史订单
    order_id VARCHAR(36) NOT NULL,
    product_id INT NOT NULL,
    FOREIGN KEY (order_id) REFERENCES customer_order(order_id) ON DELETE CASCADE,
    FOREIGN KEY (product_id) REFERENCES product(product_id)
);
  • Order和Product是多对多关系,通过OrderItem中间表拆解为两个一对多:一个Order对应多个OrderItem,一个Product对应多个OrderItem。

6. Product 类 → product 表

CREATE TABLE product (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    description TEXT,
    price DECIMAL(10,2) NOT NULL,
    stock_quantity INT NOT NULL DEFAULT 0,
    category VARCHAR(50)
);

内容的提问来源于stack exchange,提问作者Caileb Carter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:10:23