用SQL语言实现粉丝给LOL选手投票的数据库

Hi,我是无丶味,这篇博文是我利用数据库所学的知识做的一个自己喜欢的数据库
养成好习惯:先点赞后观看

在这里插入图片描述

概括介绍

根据现实生活中电竞赛事粉丝给喜欢的选手投票而给出的概念模型去创建粉丝_选手_投票数据库及选手(Player)表、战队(Team)表、粉丝(Fans)表和投票(Vote)表,并设置各种约束和触发器实现投票功能,在本次投票中,每个粉丝拥有的票数最低为0,一次只能投一张票,给一个选手只能投一张票,每次投票之后,所拥有的票数减1,直至减到0为止,取消投票后此票作废,最后还可以查看每个选手所获得的总票数为多少。

概念模型

实体E

选手:选手号,选手名,年龄,性别,所在战队号
战队:战队号,战队名,战队介绍
粉丝:粉丝号,粉丝名,年龄,性别,拥有票数

联系R:

选手与战队之间:一个选手只能从属于一个战队,而一个战队可以拥有多个选手,选手与战队之间是一对多的联系。
粉丝和选手之间:一个粉丝可以投票给多个选手,一个选手也可以被多个粉丝投票,粉丝和选手之间是多对多的联系。

E-R图

在这里插入图片描述

实际操作

创建建粉丝_选手_投票数据库

create database 粉丝_选手_投票
on
(
name=粉丝_选手_投票_date,
filename='F:\SQL SERVER数据\粉丝_选手_投票\粉丝_选手_投票dat. MDF' ,  --粉丝_选手_投票dat. MDF表示建库后创建的
size = 10,															  --日志文件存储位置和名字
maxsize = 30,
filegrowth = 50%
)
log on 
(
name =粉丝_选手_投票log,
filename='F:\SQL SERVER数据\粉丝_选手_投票\粉丝_选手_投票1og. LDF',
size = 5,
maxsize = 25,
filegrowth = 5mb )
go

创建各个表项

create table Team   --创建战队表
(
Tno char(10) not null primary key, --设置Tno为主码
Tname char (10) not null,
Tintroduction  char(50)
)create table Player  --创建选手表
(
Pno char(10) not null primary key,  --设置Pno为主码
Pname char(10) not null,
Psex char(4) not null default '男', --设置选手的性别默认为男性(在役的选手都是男性)
P_age int not null,
Tno char(10),
foreign key (Tno) references Team(Tno)  --设置Team为外码并标明是参照Team表的Tno列
)

create table Fans   --创建粉丝表
(
Fno char(10) not null primary key, --设置Fno为主码
Fname char (10) not null,
Fsex  char(4) not null check (Fsex='男' or Fsex='女')  --设置性别只能填写男或女
)
create table Vote   --创建投票表
(
Fno char(10) not null,
Pno char(10) not null,
poll int  not null default 1,
Ptime datetime not null default getdate(),  --每插入一行数据,默认自动获取实时的时间
primary key (Pno,Fno), --把粉丝号和选手号设置为主码,一个粉丝给一个选手只能投一张票
check (poll=1)  -- 设置一个粉丝单次只能投一张票
)

创建触发器注意事项

①在插入动作结束及粉丝投完票后激活触发器
②投票信息插入投票表后,粉丝表中粉丝所拥有的票数减1
③根据时间的降序排列,取出第一行数据的粉丝号,给对应的粉丝的拥有票数减1

测试阶段

各个表中的数据(投票后):
战队(Team)表:
在这里插入图片描述
选手(Player)表:
在这里插入图片描述
粉丝(Fans)表:
在这里插入图片描述
投票(Vote)表:
在这里插入图片描述
查询Uzi所获得的票数
在这里插入图片描述
查询所有选手各获得的票数
在这里插入图片描述
查询粉丝吴起给哪些选手投票了
在这里插入图片描述
查询粉丝柯美所剩的票数
在这里插入图片描述
柯美给Uzi投了一张票之后所剩余的票数
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 40
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 33
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值