chatbot_mysql5_建表.sql 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. SET NAMES utf8mb4;
  2. -- =========================================================
  3. -- 1) 系统商品:家具/服装/背景幕布(shop_items)
  4. -- =========================================================
  5. DROP TABLE IF EXISTS `shop_items`;
  6. CREATE TABLE `shop_items` (
  7. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  8. `item_code` VARCHAR(64) NOT NULL COMMENT '商品编码(业务唯一)',
  9. `name` VARCHAR(100) NOT NULL COMMENT '商品名称',
  10. `name_zh` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '商品中文名称',
  11. `name_en` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '商品英文名称',
  12. `item_type` ENUM('furniture','clothing','backdrop') NOT NULL COMMENT '商品类型',
  13. `placement_type` ENUM('wall','floor','backdrop','clothing') NOT NULL COMMENT '摆放/使用类型',
  14. `image_name` VARCHAR(255) NOT NULL COMMENT '列表/卡片展示用图片名称(OSS)',
  15. `render_image_name` VARCHAR(255) NULL DEFAULT NULL COMMENT '场景网格/幕布渲染用图片(OSS);为空则同 image_name',
  16. `size_rows` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '占用行数(家具用)',
  17. `size_cols` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '占用列数(家具用)',
  18. `price_energy` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '能量石价格(保留2位小数)',
  19. `price_crystal` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '水晶石价格(保留2位小数)',
  20. `default_z_index` INT NOT NULL DEFAULT 0 COMMENT '默认渲染层级',
  21. `scene_anchor_type` ENUM('none','seat','window') NOT NULL DEFAULT 'none' COMMENT '场景锚点类型(none=非锚点,seat=凳子/沙发,window=窗户)',
  22. `has_special_scene_trigger` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否有特殊触发场景(1=有,0=无)',
  23. `stock_mode` ENUM('unlimited') NOT NULL DEFAULT 'unlimited' COMMENT '库存模式(当前仅无限)',
  24. `repeat_purchase_mode` ENUM('single','repeatable') NOT NULL DEFAULT 'single' COMMENT '是否可重复购买',
  25. `max_per_user` INT UNSIGNED DEFAULT NULL COMMENT '每用户最多可购数量(NULL=不限制)',
  26. `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否上架',
  27. `sort_order` INT NOT NULL DEFAULT 0 COMMENT '前端展示排序',
  28. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  29. `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  30. PRIMARY KEY (`id`)
  31. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统商品表';
  32. CREATE INDEX `idx_shop_items_scene_anchor_type` ON `shop_items` (`scene_anchor_type`);
  33. -- =========================================================
  34. -- 2) 用户资产/背包表(user_assets)
  35. -- =========================================================
  36. DROP TABLE IF EXISTS `user_assets`;
  37. CREATE TABLE `user_assets` (
  38. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  39. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  40. `item_id` BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
  41. `owned_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '拥有数量',
  42. `used_qty` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '已使用数量(摆放/穿戴等)',
  43. `last_acquired_at` DATETIME DEFAULT NULL COMMENT '最近获取时间',
  44. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  45. `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  46. PRIMARY KEY (`id`)
  47. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户资产表';
  48. -- =========================================================
  49. -- 3) 购物车(购物车主表+明细表)
  50. -- 购物车=待购买列表;支持部分结算。
  51. -- =========================================================
  52. DROP TABLE IF EXISTS `shopping_cart_items`;
  53. DROP TABLE IF EXISTS `shopping_carts`;
  54. CREATE TABLE `shopping_carts` (
  55. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  56. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  57. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  58. `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  59. PRIMARY KEY (`id`)
  60. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车主表';
  61. CREATE TABLE `shopping_cart_items` (
  62. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  63. `cart_id` BIGINT UNSIGNED NOT NULL COMMENT '购物车ID',
  64. `item_id` BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
  65. `quantity` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '购物车数量(支持部分结算后递减)',
  66. `unit_price_energy` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '加购时能量石单价快照(保留2位小数)',
  67. `unit_price_crystal` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '加购时水晶石单价快照(保留2位小数)',
  68. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  69. `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  70. PRIMARY KEY (`id`)
  71. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车明细表';
  72. -- =========================================================
  73. -- 4) 购买订单(A):purchase_orders + purchase_order_items
  74. -- 一次checkout -> 一笔订单
  75. -- =========================================================
  76. DROP TABLE IF EXISTS `purchase_order_items`;
  77. DROP TABLE IF EXISTS `purchase_orders`;
  78. CREATE TABLE `purchase_orders` (
  79. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  80. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  81. `cart_id` BIGINT UNSIGNED NOT NULL COMMENT '结算来源购物车ID(业务字段)',
  82. `status` ENUM('created','completed','failed','cancelled') NOT NULL DEFAULT 'created' COMMENT '订单状态',
  83. `total_quantity` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '订单总数量(便于展示)',
  84. `total_cost_energy` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '能量石总花费(保留2位小数)',
  85. `total_cost_crystal` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '水晶石总花费(保留2位小数)',
  86. `completed_at` DATETIME DEFAULT NULL COMMENT '完成时间',
  87. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  88. PRIMARY KEY (`id`)
  89. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购买订单主表';
  90. CREATE TABLE `purchase_order_items` (
  91. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  92. `order_id` BIGINT UNSIGNED NOT NULL COMMENT '订单ID(业务字段)',
  93. `item_id` BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
  94. `quantity` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '购买数量',
  95. `unit_price_energy` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '单价快照-能量石(保留2位小数)',
  96. `unit_price_crystal` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '单价快照-水晶石(保留2位小数)',
  97. `cost_energy` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '花费快照-能量石(保留2位小数)',
  98. `cost_crystal` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '花费快照-水晶石(保留2位小数)',
  99. `item_name_snapshot` VARCHAR(100) NOT NULL COMMENT '商品名快照',
  100. `image_name_snapshot` VARCHAR(255) NOT NULL COMMENT '图片名称快照',
  101. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  102. PRIMARY KEY (`id`)
  103. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购买订单明细表';
  104. -- =========================================================
  105. -- 5) 购买流水/审计(asset_purchase_logs)
  106. -- =========================================================
  107. DROP TABLE IF EXISTS `asset_purchase_logs`;
  108. CREATE TABLE `asset_purchase_logs` (
  109. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  110. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  111. `item_id` BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
  112. `quantity` INT UNSIGNED NOT NULL COMMENT '购买数量',
  113. `unit_price_energy` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '单价快照-能量石(保留2位小数)',
  114. `unit_price_crystal` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '单价快照-水晶石(保留2位小数)',
  115. `cost_energy` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '总花费-能量石(保留2位小数)',
  116. `cost_crystal` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '总花费-水晶石(保留2位小数)',
  117. `item_name_snapshot` VARCHAR(100) NOT NULL COMMENT '商品名快照',
  118. `image_name_snapshot` VARCHAR(255) NOT NULL COMMENT '图片名称快照',
  119. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  120. PRIMARY KEY (`id`)
  121. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户购买流水表';
  122. -- =========================================================
  123. -- 6) /chatbot当前背景幕布(user_chatbot_backdrops)
  124. -- =========================================================
  125. DROP TABLE IF EXISTS `user_chatbot_backdrops`;
  126. CREATE TABLE `user_chatbot_backdrops` (
  127. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  128. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  129. `backdrop_item_id` BIGINT UNSIGNED NOT NULL COMMENT '幕布商品ID(来源shop_items)',
  130. `z_index` INT NOT NULL DEFAULT 0 COMMENT '渲染层级',
  131. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  132. `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  133. PRIMARY KEY (`id`)
  134. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户当前/chatbot背景幕布表';
  135. -- =========================================================
  136. -- 7) /chatbot布局主表(每用户仅保留最新;在业务层覆盖实现)
  137. -- =========================================================
  138. DROP TABLE IF EXISTS `chatbot_layout_items`;
  139. DROP TABLE IF EXISTS `chatbot_layouts`;
  140. CREATE TABLE `chatbot_layouts` (
  141. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  142. `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  143. `grid_rows` TINYINT UNSIGNED NOT NULL DEFAULT 5 COMMENT '固定:5行',
  144. `grid_cols` TINYINT UNSIGNED NOT NULL DEFAULT 4 COMMENT '固定:4列',
  145. `cell_width` SMALLINT UNSIGNED NOT NULL DEFAULT 96 COMMENT '固定:96',
  146. `cell_height` SMALLINT UNSIGNED NOT NULL DEFAULT 96 COMMENT '固定:96',
  147. `design_width` SMALLINT UNSIGNED NOT NULL DEFAULT 393 COMMENT '设计宽(393)',
  148. `design_height` SMALLINT UNSIGNED NOT NULL DEFAULT 852 COMMENT '设计高(852)',
  149. `decor_area_width` SMALLINT UNSIGNED NOT NULL DEFAULT 393 COMMENT '装饰区宽(393)',
  150. `decor_area_height` SMALLINT UNSIGNED NOT NULL DEFAULT 482 COMMENT '装饰区高(482)',
  151. `version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '布局版本(可选)',
  152. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  153. `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  154. PRIMARY KEY (`id`)
  155. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='/chatbot布局主表(仅最新)';
  156. -- =========================================================
  157. -- 8) /chatbot布局明细(墙/地家具位置 + z_index)
  158. -- =========================================================
  159. CREATE TABLE `chatbot_layout_items` (
  160. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  161. `layout_id` BIGINT UNSIGNED NOT NULL COMMENT '/chatbot布局ID(业务字段)',
  162. `user_asset_id` BIGINT UNSIGNED NOT NULL COMMENT '用户资产ID(业务字段)',
  163. `item_id` BIGINT UNSIGNED NOT NULL COMMENT '商品ID(冗余便于查询)',
  164. `placement_type` ENUM('wall','floor') NOT NULL COMMENT '区域类型:墙/地',
  165. `start_row` TINYINT UNSIGNED NOT NULL COMMENT '起始行(从1开始)',
  166. `start_col` TINYINT UNSIGNED NOT NULL COMMENT '起始列(从1开始)',
  167. `size_rows` TINYINT UNSIGNED NOT NULL COMMENT '占用行数',
  168. `size_cols` TINYINT UNSIGNED NOT NULL COMMENT '占用列数',
  169. `z_index` INT NOT NULL DEFAULT 0 COMMENT '渲染层级(用于排序)',
  170. `image_name_snapshot` VARCHAR(255) NOT NULL COMMENT '图片名称快照',
  171. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  172. PRIMARY KEY (`id`)
  173. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='/chatbot布局明细表';