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投了一张票之后所剩余的票数