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投了一張票之後所剩餘的票數