【开发日记】新年主题的Minecraft服务器插件FantasticChineseNewYear——红包功能的数据库设计(第三天)

一开始想要堆代码,其实我是拒绝的!

但是呢,又没有什么很好的办法来表示数据库结构,所以就还是放出SQL语句吧……以下语句是使用Navicat自动生成的(其实我并不是很熟悉SQL语句,所以就用了很多GUI工具)。

CREATE TABLE `redpackets`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `SenderUuid` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `SendTime` bigint(20) NOT NULL,
  `ExpireTime` bigint(20) NOT NULL,
  `RedPacketType` tinyint(1) NOT NULL,
  `RewardType` tinyint(1) NULL DEFAULT NULL,
  `Items` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
  `Money` double NULL DEFAULT NULL,
  `Points` double NULL DEFAULT NULL,
  `Amount` int(11) NULL DEFAULT NULL,
  `ReceiverPlayerUuid` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
  `Password` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
  `ClaimPlayersAndRewards` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

来解释一下关于这个数据表吧,首先要对我们的红包系统进行一个抽象,红包的通用属性有:发送者,类型(专属红包、普通红包、口令红包或拼手气红包),内容物类型(游戏内物品、金钱或点卷),发送时间和过期时间。
其中,不同类型的红包和不同内容物的红包具有的属性就不同了,比如专属红包指定的领取者这个属性,而口令红包的属性则是口令。
这个情况其实是应该分表的,按照关系把所有的 内容物为金钱的专属红包 或者 内容物为物品的口令红包 分进不同的表里面,但是如果这样的话,排列组合,光是红包功能就会有十二个表(太多啦!),所以就直接放在一个表里面了。


时间关系,先写这么多(一天天的,都在挤牙膏.jpg

——时雨 2019.12.6

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据