// Use DBML to define your database structure
// Docs: https://dbml.dbdiagram.io/docs
Table follows {
following_user_id integer
followed_user_id integer
created_at timestamp
}
Table users {
id integer [primary key]
username varchar
role varchar
created_at timestamp
}
Table posts {
id integer [primary key]
title varchar
body text [note: 'Content of the post']
user_id integer [not null]
status varchar
created_at timestamp
}
Ref user_posts: posts.user_id > users.id // many-to-one
Ref: users.id < follows.following_user_id
Ref: users.id < follows.followed_user_id
Table "authority" {
"id" int [pk, not null, increment, note: 'ID']
"name" varchar(32) [not null, note: '名称']
"description" varchar(64) [not null, note: '描述']
Indexes {
name [type: btree, unique, name: "name"]
}
Note: '权限表'
}
Table "comments" {
"id" int [pk, not null, increment, note: '评论ID']
"news_id" int [not null, note: '新闻ID']
"author" varchar(255) [default: '匿名用户', note: '评论作者']
"content" text [not null, note: '评论内容']
"created_at" datetime [default: `CURRENT_TIMESTAMP`, note: '评论时间']
Indexes {
news_id [type: btree, name: "news_id"]
}
Note: '评论表'
}
Table "hero" {
"id" int [pk, not null, increment, note: '英雄ID']
"name" varchar(64) [not null, note: '英雄名称']
"avatar" varchar(256) [default: NULL, note: '英雄头像(存储头像图片的URL)']
"description" text [note: '英雄描述']
"created_at" datetime [default: `CURRENT_TIMESTAMP`, note: '创建时间']
"updated_at" datetime [default: `CURRENT_TIMESTAMP`, note: '更新时间']
Note: '英雄信息表'
}
Table "match_rounds" {
"id" int [pk, not null, increment, note: '轮次ID']
"match_id" int [not null, note: '比赛ID']
"round_number" int [not null, note: '轮次序号(如第1局、第2局)']
"team1_score" int [default: NULL, note: '队伍1的得分']
"team2_score" int [default: NULL, note: '队伍2的得分']
Indexes {
match_id [type: btree, name: "match_id"]
}
Note: '比赛轮次表'
}
Table "matches" {
"id" int [pk, not null, increment, note: '比赛ID']
"status" varchar(20) [not null, note: '比赛状态(如已结束、进行中)']
"name" varchar(100) [not null, note: '比赛名称']
"stage" varchar(50) [not null, note: '比赛阶段(如小组赛、淘汰赛)']
"date" datetime [not null, note: '比赛时间']
"team1_id" int [not null, note: '队伍1的ID']
"team2_id" int [not null, note: '队伍2的ID']
"team1_score" int [default: NULL, note: '队伍1的得分']
"team2_score" int [default: NULL, note: '队伍2的得分']
"event_type" varchar(50) [not null, note: '比赛类型(如全球总决赛、LPL)']
Indexes {
team1_id [type: btree, name: "team1_id"]
team2_id [type: btree, name: "team2_id"]
}
Note: '比赛表'
}
Table "news" {
"id" int [pk, not null, increment, note: '新闻ID']
"title" varchar(255) [not null, note: '新闻标题']
"author" varchar(100) [default: NULL, note: '作者名称']
"publish_date" datetime [not null, note: '发布时间']
"content" text [not null, note: '新闻内容']
"views" int [default: 0, note: '浏览次数']
"image" varchar(255) [default: NULL, note: '新闻图片']
Note: '新闻表'
}
Table "orders" {
"id" int [pk, not null, increment]
"user_id" int [not null]
"match_id" int [not null]
"ticket_id" int [not null]
"quantity" int [not null]
"total_price" decimal(10,2) [default: NULL]
"order_time" timestamp [default: `CURRENT_TIMESTAMP`]
"status" varchar(20) [default: '已下单']
Indexes {
ticket_id [type: btree, name: "fk_ticket_id"]
}
}
Table "player_stats" {
"id" int [pk, not null, increment, note: '记录ID']
"round_id" int [not null, note: '轮次ID']
"team_member_id" int [not null, note: '选手ID']
"hero_id" int [not null, note: '英雄ID']
"kills" int [default: 0, note: '击杀数']
"deaths" int [default: 0, note: '死亡数']
"assists" int [default: 0, note: '助攻数']
"cs" int [default: 0, note: '补刀数(Creep Score)']
"damage" int [default: 0, note: '伤害值']
"gold" int [default: 0, note: '经济(金币)']
"vision" int [default: 0, note: '视野控制分']
Indexes {
round_id [type: btree, name: "round_id"]
team_member_id [type: btree, name: "team_member_id"]
hero_id [type: btree, name: "hero_id"]
}
Note: '比赛轮次选手数据表'
}
Table "referee" {
"id" int [pk, not null, increment, note: 'ID']
"username" varchar(255) [default: NULL]
"refereeName" varchar(32) [default: NULL, note: '裁判姓名']
"level" varchar(64) [default: NULL, note: '裁判等级']
"experience" text [note: '执裁经历']
Indexes {
username [type: btree, name: "fk_username"]
}
Note: '裁判表'
}
Table "report" {
"id" int [pk, not null, increment, note: 'ID']
"refereeName" varchar(64) [default: NULL, note: '裁判姓名']
"reporterName" varchar(64) [default: NULL, note: '举报人姓名']
"contact" varchar(64) [default: NULL, note: '联系方式']
"title" varchar(128) [default: NULL, note: '举报标题']
"content" varchar(2048) [default: NULL, note: '举报内容']
"response" varchar(2048) [default: NULL, note: '裁判回复']
"status" varchar(64) [default: '待处理', note: '举报状态']
Note: '裁判举报表'
}
Table "role" {
"id" int [pk, not null, increment, note: 'ID']
"name" varchar(32) [not null, note: '名称']
"description" varchar(64) [not null, note: '描述']
Indexes {
name [type: btree, unique, name: "name"]
}
Note: '角色表'
}
Table "roles_authorities" {
"id" int [pk, not null, increment, note: 'ID']
"roleId" int [not null, note: '角色ID']
"authorityId" int [not null, note: '权限ID']
Note: '角色权限表'
}
Table "rules" {
"id" int [pk, not null, increment, note: '赛事规则ID']
"title" varchar(255) [default: NULL, note: '赛事规则标题']
"publisher" varchar(100) [default: NULL, note: '发布人']
"description" text [note: '赛事规则详细描述']
"created_at" datetime [default: `CURRENT_TIMESTAMP`, note: '规则创建时间']
"updated_at" datetime [default: `CURRENT_TIMESTAMP`, note: '规则最后更新时间']
Note: '赛事规则表'
}
Table "team" {
"id" int [pk, not null, increment, note: '队伍ID']
"team_name" varchar(255) [not null, note: '队伍名称']
"team_avatar" varchar(255) [default: NULL, note: '队伍头像URL']
"team_description" text [note: '队伍描述']
"created_at" datetime [default: `CURRENT_TIMESTAMP`, note: '创建时间']
"updated_at" datetime [default: `CURRENT_TIMESTAMP`, note: '更新时间']
Note: '队伍表'
}
Table "team_member" {
"id" int [pk, not null, increment, note: '队员ID']
"name" varchar(64) [not null, note: '队员姓名']
"avatar" varchar(256) [default: NULL, note: '队员头像(存储头像图片的URL)']
"team_id" int [not null, note: '所属战队ID']
"position" varchar(64) [default: NULL, note: '游戏位置(例如:上单、中单、打野、辅助等)']
"kills" int [default: 0, note: '击杀数']
"assists" int [default: 0, note: '助攻数']
"survival_time" int [default: 0, note: '生存时间(单位:秒)']
"damage" int [default: 0, note: '伤害值']
"gold" int [default: 0, note: '经济(例如:金币数量)']
"vision" int [default: 0, note: '视野(例如:视野控制次数)']
"match_record" text [note: '比赛记录(可以是JSON或文本描述)']
"created_at" datetime [default: `CURRENT_TIMESTAMP`, note: '创建时间']
"updated_at" datetime [default: `CURRENT_TIMESTAMP`, note: '更新时间']
Indexes {
team_id [type: btree, name: "fk_team_member_team_id"]
}
Note: '队员信息表'
}
Table "team_member_heroes" {
"team_member_id" int [not null, note: '队员ID']
"hero_id" int [not null, note: '英雄ID']
Indexes {
(team_member_id, hero_id) [pk, type: btree]
hero_id [type: btree, name: "hero_id"]
}
}
Table "tickets" {
"id" int [pk, not null, increment]
"match_id" int [not null]
"ticket_type" varchar(50) [default: NULL]
"price" decimal(10,2) [default: NULL]
"total_quantity" int [default: NULL]
"sold_quantity" int [default: 0]
"create_time" timestamp [default: `CURRENT_TIMESTAMP`]
Indexes {
match_id [type: btree, name: "match_id"]
}
}
Table "user" {
"id" int [pk, not null, increment, note: 'ID']
"name" varchar(32) [default: NULL, note: '名称']
"username" varchar(16) [not null, note: '账号']
"password" varchar(512) [not null, note: '密码']
"avatar" varchar(128) [default: NULL, note: '头像']
"token" varchar(512) [default: NULL, note: '令牌']
"roleId" int [not null, note: '角色ID']
"loggedAt" datetime [default: NULL, note: '登录于']
"deletedAt" datetime [default: NULL, note: '删除于']
"registeredAt" datetime [not null, note: '注册于']
Indexes {
username [type: btree, unique, name: "username"]
}
Note: '用户表'
}
Ref "comments_ibfk_1":"news"."id" < "comments"."news_id" [update: cascade, delete: cascade]
Ref "match_rounds_ibfk_1":"matches"."id" < "match_rounds"."match_id" [update: cascade, delete: cascade]
Ref "matches_ibfk_1":"team"."id" < "matches"."team1_id" [update: cascade, delete: cascade]
Ref "matches_ibfk_2":"team"."id" < "matches"."team2_id" [update: cascade, delete: cascade]
Ref "fk_ticket_id":"tickets"."id" < "orders"."ticket_id" [update: cascade, delete: cascade]
Ref "player_stats_ibfk_1":"match_rounds"."id" < "player_stats"."round_id" [update: cascade, delete: cascade]
Ref "player_stats_ibfk_2":"team_member"."id" < "player_stats"."team_member_id" [update: cascade, delete: cascade]
Ref "player_stats_ibfk_3":"hero"."id" < "player_stats"."hero_id" [update: cascade, delete: cascade]
Ref "fk_username":"user"."username" < "referee"."username" [update: restrict, delete: restrict]
Ref "fk_team_member_team_id":"team"."id" < "team_member"."team_id" [update: cascade, delete: cascade]
Ref "team_member_heroes_ibfk_1":"team_member"."id" < "team_member_heroes"."team_member_id" [update: cascade, delete: cascade]
Ref "team_member_heroes_ibfk_2":"hero"."id" < "team_member_heroes"."hero_id" [update: cascade, delete: cascade]
Ref "tickets_ibfk_1":"matches"."id" < "tickets"."match_id" [update: restrict, delete: restrict]
生成er图