SQLite / MySQL大表与多个小表?

时间:2014-03-05 04:51:17

标签: mysql sql sqlite minecraft bukkit

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

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

选项1:

4个较小的表:

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

这需要我分别查询每个表,然后从每个ResultSet解析。

选项2:

1张大表

  • playerlist [id,player,ip,lastlogin,banReason,banEndTime,banType,muteReason,muteEndTime,muteType,warns]

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


我想知道的是 - 整体上最好的选择是什么?从我看到的情况来看,人们的答案取决于人们如何使用他们的数据库和大小。由于我是SQL数据库的新手,我不确定哪种情况会好。

1 个答案:

答案 0 :(得分:0)

我建议选项1,因为它更符合标准化,然后是选项2.

选项1的优点:

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

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

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

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