gpt4 book ai didi

mysql - SQLite/MySQL 大表与多个小表?

转载 作者:行者123 更新时间:2023-11-30 00:35:48 24 4
gpt4 key购买 nike

我正在为 Bukkit 服务器开发一个管理插件。我想给它提供禁止(正常、临时和 ip)、静音(正常和临时)和警告玩家的功能。为了存储所有这些信息,我想使用 SQL 数据库(SQLite 或 MySQL)。

信息可以通过两种方式存储。

选项 1:

4 个较小的表:

  • playerlist [id,player,ip,laSTLogin](用于维护每个加入的玩家的列表)
  • banlist [id,player,ip,creationTime,reason,endTime,type](跟踪所有禁令信息)
  • 静音列表 [id,player,creationTime,reason,endtime,type](跟踪所有静音信息)
  • 警告列表 [id、玩家、警告]

这需要我单独查询每个表,然后从每个单独的 ResultSet 中进行解析。

选项 2:

1 个大 table

  • 玩家列表 [id、玩家、IP、上次登录、banReason、banEndTime、banType、muteReason、muteEndTime、muteType、警告]

这只需要我查询 1 个大表来获取所有必要的信息,然后可以从单个 ResultSet 中解析这些信息。

<小时/>

我想知道的是 - 总体上最好的选择是什么?据我所知,人们的答案会根据人们使用数据库的方式及其大小而有所不同。由于我是 SQL 数据库的新手,我不确定哪种情况适合。

最佳答案

我会推荐选项 1,因为它比选项 2 更标准化。

选项 1 的优点:

1) 最小的数据冗余。 (例如,禁令信息只会在禁令列表中出现一次)

2)真相的单一版本。 (由于事件仅在表中记录一次,因此维护单一版本的事实)

3)更新速度更快(由于信息不会存储在多个地方,因此更新速度会更快)

在运行需要连接多个表的分析查询的系统中采用非规范化模型。由于Join大表会导致性能问题,因此采用非规范化模型。

关于mysql - SQLite/MySQL 大表与多个小表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188846/

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