游戏开发过程中遇到 游戏装备、游戏材料等物品道具的交易售卖功能实现;
如下是结合了 Google 的 bard 给我的 mysql 表设计
1. 物品表 物品表是整个交易系统的基础,用于存储游戏中所有物品的相关信息,包括物品 ID 、物品名称、物品类型、物品属性、物品等级、物品数量等。
CREATE TABLE `items` (
`item_id` INT NOT NULL AUTO_INCREMENT,
`item_name` VARCHAR(255) NOT NULL,
`item_type` VARCHAR(255) NOT NULL,
`item_attributes` JSON NOT NULL,
`item_level` INT NOT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 用户持有哪些物品及数量表
CREATE TABLE `user_items` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`item_id` INT NOT NULL, // 物品 id
`item_count` INT NOT NULL, // 物品数量
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.交易信息表 交易信息表用于存储交易的相关信息,包括交易 ID 、物品 ID 、交易价格、交易时间、交易状态等。 让其他用户可以看到 当前正在售卖的道具物品。
CREATE TABLE `trade_info` (
`trade_id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL, // 是谁 在卖道具
`item_id` INT NOT NULL, // 卖的什么道具
`item_count` INT NOT NULL, // 当前在售数量 重点关注 在售数量为 0 的记录要不要删除
`price` DECIMAL(10,2) NOT NULL, // 价格
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`status` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`trade_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
4.交易记录表 交易记录表用于存储交易的详细记录,包括交易 ID 、物品 ID 、交易价格、交易时间、交易状态、买家 ID 、卖家 ID 等。
CREATE TABLE `trade_records` (
`trade_id` INT NOT NULL,
`item_id` INT NOT NULL,
`item_count` INT NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`status` TINYINT(1) NOT NULL DEFAULT 0,
`buyer_id` INT NOT NULL,
`seller_id` INT NOT NULL,
PRIMARY KEY (`trade_id`),
FOREIGN KEY (`buyer_id`) REFERENCES `players` (`player_id`),
FOREIGN KEY (`seller_id`) REFERENCES `players` (`player_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
问题疑惑
- 关于 交易信息表(trade_info), 某物品道具已经被买空,库存字段为 0; 是否需要从交易信息表 删除; 否则 trade_info 表数据非常大
- 另外是否有其他更好的方案; 不知道 DNF 的那个交易功能 怎么做到的