我正在尝试创建一个游戏数据库。我已经创建了一个用户表,其中存储了用户,密码和电子邮件。
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` char(40) DEFAULT NULL,
`email` varchar(60) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8;
我还创建了一个游戏桌,其中包含游戏类型,游戏名称,持续时间,描述,活动以及创建游戏的人员。
CREATE TABLE `games` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(30) DEFAULT NULL,
`name` varchar(60) DEFAULT NULL,
`duration` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`description` varchar(255) DEFAULT NULL,
`Active` tinyint(1) DEFAULT NULL,
`Completed` tinyint(1) DEFAULT NULL,
`createdBy` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
用户将能够创建游戏并邀请x个用户,因此它将是多对多关系。我试图创建一个名为active_games的表,但我不确定应该如何继续。我需要一个连接,以便我知道谁创造了游戏以及谁在玩这个游戏。
CREATE TABLE `active_games` (
`user_id` int(11) NOT NULL DEFAULT '0',
`game_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`user_id`,`game_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
下一步是什么?如果用户创建游戏并发送"邀请"对于其他朋友,是否可以自动分配游戏ID和被邀请到该游戏ID的用户?如果我想为特定用户找到所有活动游戏,我该怎么做?
答案 0 :(得分:1)
您还需要两张桌子。 UserGames
会获得有关创建游戏的用户的信息:
CREATE TABLE UserGames (
UserGameId int not null auto_increment primary key,
userid int NOT NULL references users(id),
gameid int not null references games(id),
CreationDate datetime,
. . .
);
GameInvites
:
CREATE TABLE GameInvites (
GameInviteId int not null auto_increment primary key,
UserGamesId int not null references UserGames(UserGamesId),
invited_userid int NOT NULL references users(id),
AcceptedFlag bit
. . .
);
. . .
表示可能要存储的有关每个关系的其他信息。