Большая таблица SQLite/MySQL против нескольких маленьких таблиц?

Я разрабатываю плагин администрирования для серверов Bukkit. Я хочу дать ему возможность банить (обычный, временный и 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 [идентификатор,игрока,предупреждает]

Это потребовало бы, чтобы я запрашивал каждую таблицу отдельно, а затем анализировал каждую отдельную ResultSet.

Вариант 2:

1 большой стол

  • playerlist [id,player,ip,lastlogin,banReason,banEndTime,banType,muteReason,muteEndTime,muteType, предупреждает]

Это потребовало бы от меня только запроса 1 большой таблицы для получения всей необходимой информации, которую затем можно было бы проанализировать из одного ResultSet.


Я хочу знать следующее: Какой вариант в целом был бы лучшим? Судя по тому, что я видел, ответы людей различаются в зависимости от того, как люди используют свою базу данных и ее размер. Поскольку я новичок в базах данных SQL, я не уверен, что было бы хорошо в этой ситуации.


person Kyle Colantonio    schedule 05.03.2014    source источник


Ответы (1)


Я бы рекомендовал вариант 1, так как он более нормализован, чем вариант 2.

Преимущества Варианта 1:

1) минимальная избыточность данных. (например, информация о бане появится только один раз в таблице банлистов)

2) Единая версия Истины. (Поскольку событие регистрируется в таблице только один раз, поддерживается единая версия истины)

3) Более быстрые обновления (поскольку информация не хранится в нескольких местах, выполнение любых обновлений будет намного быстрее)

Денормализованная модель применяется в системе, в которой выполняются аналитические запросы, требующие объединения нескольких таблиц. Поскольку объединение больших таблиц приведет к проблемам с производительностью, используется денормализованная модель.

person rogue-one    schedule 05.03.2014
comment
Применилось бы то же самое, если бы я подумал о разделении фактического файла базы данных на несколько файлов? (Например: banlist.db, playerlist.db и т. д.) - person Kyle Colantonio; 05.03.2014
comment
да .. Вышеизложенное применимо независимо от физического дизайна базы данных. - person rogue-one; 05.03.2014