gpt4 book ai didi

mysql - SQL - 规范化问题

转载 作者:行者123 更新时间:2023-11-29 05:10:07 25 4
gpt4 key购买 nike

我正在制作梦幻足球游戏,我对如何设计我的数据库有疑问。我很难设计一种在联盟之间共享球员的方式,但仍要将其标准化。

有一个包含所有可能的足球运动员的表,称为 Players,一个包含球队信息的表称为 Teams,一个包含用户信息的表称为 Users,一个包含联赛信息的表和一个保存所有其他表 id 的表称为花名册。

基本上有一个联盟有一定数量的球员,一旦选秀开始,球员就会被安排到一个球队,如果他们属于一个球队,他们就不能再被征召。我遇到的问题是,与多个联赛分享这些球员。目前我有一个 bool 值设置给玩家,如果他们可用或不可用。这一直有效,直到另一个联盟尝试征召该球员,因为他们已被设置为不可用。

我的问题是我应该如何让球员在数据库中可用/不可用,以便不同的联赛有相同的球员选择?有没有更好的方法来设置这个数据库?

花名册

CREATE TABLE Rosters ( 
RostersID INT NOT NULL AUTO_INCREMENT ,
LeagueID INT NOT,
TeamID INT NOT NULL ,
PlayerID INT NOT NULL ,
UserID INT NOT NULL ,
PRIMARY KEY (RostersID)
)

联盟

CREATE TABLE Leagues ( 
LeagueID INT NOT NULL AUTO_INCREMENT ,
LeagueName VARCHAR(35) NOT NULL ,
PRIMARY KEY (LeagueID)
)

团队

CREATE TABLE Teams (
TeamID INT NOT NULL AUTO_INCREMENT ,
TeamName VARCHAR(35) NOT NULL ,
StateCode CHAR(3) NOT NULL ,
Ranking INT NOT NULL DEFAULT '0',
PRIMARY KEY (TeamID)
)

用户

CREATE TABLE Users (
UserID INT NOT NULL AUTO_INCREMENT ,
UserName VARCHAR(45) NOT NULL ,
Email VARCHAR(55) NOT NULL ,
Password VARCHAR(45) NOT NULL ,
PRIMARY KEY (UserID)
)

玩家

CREATE TABLE Players ( 
PlayerID INT NOT NULL AUTO_INCREMENT ,
LastName VARCHAR(50) NULL ,
FirstName VARCHAR(50) NULL ,
Postion VARCHAR NULL ,
Available BOOLEAN NOT NULL DEFAULT FALSE ,
PRIMARY KEY (PlayerID)
)

最佳答案

这实际上不是数据库级别的问题,这是应用程序逻辑的任务。您可以在数据库级别上做的是在 roster 表中的 leagueid, playerid 字段上放置一个多列唯一约束。这将防止您的应用程序将同一名球员分配到同一联赛两次。去掉 available 字段。

一个联赛的可用球员可以通过在名单表上左加入球员表来列出:

select p.playerid
from players p
left join rosters r on p.playerid=r.playerid and r.leagueid=...
where r.playerid is null

关于mysql - SQL - 规范化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40834599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com