🗄️ 数据库ER关系图

赛车小程序数据库结构可视化展示

完整ER关系图

主键 (PK)
外键 (FK)
唯一键 (UK)
erDiagram users ||--o{ event_registrations : "报名" users ||--o{ orders : "下单" users ||--o{ user_addresses : "拥有" users ||--o{ user_bills : "产生" users ||--o{ user_dynamics : "发布" users ||--o{ user_verify : "认证" events ||--o{ event_groups : "包含" events ||--o{ event_registrations : "被报名" events ||--o{ event_announcements : "有公告" events ||--o{ event_dynamics : "关联" event_groups ||--o{ race_results : "产生" event_groups ||--o{ start_lists : "生成" event_groups ||--o{ event_registrations : "分组" drivers ||--o{ race_results : "参赛" drivers ||--o{ start_lists : "发车" drivers ||--o{ event_registrations : "报名" teams ||--o{ drivers : "包含" products ||--o{ product_specs : "有规格" products ||--o{ order_items : "被购买" orders ||--o{ order_items : "包含" orders }o--|| user_addresses : "使用" users { int id PK string openid UK string nickname string avatar_url string phone decimal balance_coins int verify_status datetime created_at datetime updated_at } events { int id PK string title date start_date date end_date string location string contact_name string contact_phone string contact_wechat date reg_deadline enum status text description string cover_image int view_count datetime created_at } event_groups { int id PK int event_id FK string name datetime race_date enum status int max_participants decimal reg_price int coins_reward } event_registrations { int id PK int user_id FK int event_id FK int group_id FK int driver_id FK string round_name enum status decimal paid_amount datetime paid_at datetime created_at } drivers { int id PK string name int team_id FK string car_number string photo datetime created_at } teams { int id PK string name string logo datetime created_at } race_results { int id PK int group_id FK int driver_id FK int rank string total_time string race_time string penalty_time text penalty_details datetime created_at } start_lists { int id PK int group_id FK int driver_id FK int lane_number int sort_order datetime created_at } products { int id PK string title text description string category json images decimal min_price decimal max_price int min_coins_reward int max_coins_reward int stock int sales_count enum status datetime created_at } product_specs { int id PK int product_id FK string spec_name decimal price int coins_reward int stock datetime created_at } orders { int id PK int user_id FK string order_no UK decimal total_amount int coins_used int coins_reward int address_id FK enum status string logistics_company string logistics_no datetime paid_at datetime shipped_at datetime completed_at datetime created_at } order_items { int id PK int order_id FK int product_id FK int spec_id FK int quantity decimal price_snapshot int coins_reward_snapshot } user_addresses { int id PK int user_id FK string name string phone string province string city string district string street string postal_code boolean is_default datetime created_at } user_bills { int id PK int user_id FK enum type enum source_type int source_id int coins_change int coins_balance string description datetime created_at } user_dynamics { int id PK int user_id FK int event_id FK string content json media_urls int like_count int comment_count enum status datetime created_at } user_verify { int id PK int user_id FK string real_name string id_card json id_card_images enum status string reject_reason datetime verified_at datetime created_at } event_announcements { int id PK int event_id FK string title text content int sort_order datetime created_at } event_dynamics { int id PK int event_id FK int user_id FK string content json media_urls datetime created_at }

核心表说明

users (用户表)
存储用户基本信息,包括微信OpenID、昵称、头像、手机号、赛币余额、认证状态等。
events (赛事表)
存储赛事基本信息,包括标题、时间、地点、联系人、状态、描述等。
event_groups (赛事分组表)
存储赛事的各个分组信息,包括分组名称、比赛时间、报名价格、奖励赛币等。
event_registrations (报名表)
存储用户报名信息,关联用户、赛事、分组、车手等信息。
race_results (成绩表)
存储比赛成绩信息,包括排名、总成绩、比赛成绩、罚时等。
start_lists (发车表)
存储发车表信息,包括车道号、车手信息、排序等。
products (商品表)
存储商品基本信息,包括名称、描述、价格区间、返币区间、库存等。
product_specs (商品规格表)
存储商品规格信息,每个商品可以有多个规格,每个规格有独立的价格和返币。
orders (订单表)
存储订单信息,包括订单号、用户、金额、使用赛币、返币、状态、物流等。
order_items (订单明细表)
存储订单商品明细,包括商品、规格、数量、价格快照等。
user_addresses (收货地址表)
存储用户收货地址信息,支持多个地址,可设置默认地址。
user_bills (用户账单表)
存储用户赛币变动记录,包括收入、支出、来源类型、变动后余额等。
user_verify (实名认证表)
存储用户实名认证信息,包括真实姓名、身份证号、证件照片、审核状态等。
drivers (车手表)
存储车手基本信息,包括姓名、车号、所属车队、照片等。
teams (车队表)
存储车队信息,包括车队名称、Logo等。

关系说明

用户相关关系:

  • users → event_registrations:一个用户可以有多个报名记录
  • users → orders:一个用户可以有多个订单
  • users → user_addresses:一个用户可以有多个收货地址
  • users → user_bills:一个用户可以有多个账单记录
  • users → user_dynamics:一个用户可以发布多个动态
  • users → user_verify:一个用户对应一个认证记录(一对一)

赛事相关关系:

  • events → event_groups:一个赛事可以有多个分组
  • events → event_registrations:一个赛事可以有多个报名记录
  • events → event_announcements:一个赛事可以有多个公告
  • events → event_dynamics:一个赛事可以关联多个动态
  • event_groups → race_results:一个分组可以产生多个成绩记录
  • event_groups → start_lists:一个分组可以生成一个发车表
  • drivers → race_results:一个车手可以有多条成绩记录
  • drivers → start_lists:一个车手可以出现在多个发车表中
  • teams → drivers:一个车队可以有多个车手

商城相关关系:

  • products → product_specs:一个商品可以有多个规格
  • products → order_items:一个商品可以被多个订单购买
  • orders → order_items:一个订单可以包含多个商品
  • orders → user_addresses:一个订单使用一个收货地址
  • product_specs → order_items:一个规格可以被多个订单购买

索引设计

主要索引:

  • users.openid:UNIQUE INDEX(微信登录唯一标识)
  • users.phone:INDEX(手机号查询)
  • events.status:INDEX(按状态筛选赛事)
  • events.start_date:INDEX(按时间排序)
  • event_registrations.user_id:INDEX(查询用户报名)
  • event_registrations.event_id:INDEX(查询赛事报名)
  • orders.order_no:UNIQUE INDEX(订单号唯一)
  • orders.user_id:INDEX(查询用户订单)
  • orders.status:INDEX(按状态筛选订单)
  • user_bills.user_id:INDEX(查询用户账单)
  • user_bills.created_at:INDEX(按时间排序)