Как лучше спроектировать базу данных

Сфера тематики: cs
Задача: Иметь список всех никнеймов и ip-адресов игрока
Вопрос: Какое отношение связей выбрать?
Наиболее частые запросы: update and insert
Редкие запросы: select

1.
Если иметь 1 таблицу получим много повторяющих данных, например:
Имеем таблицу: id, steamid, ip, name, created_at, updated_at
Мысли в слух: Если имя у игрока сменится, то мы снова добавим строчку с теме же данными steamid и ip, получается дублирование данных. Забиваем диск избыточной информацией, но вставка и чтение данных будет проще

2.
Если иметь 3 таблицы

  1. Таблица users: id, steamid, joins, created_at
  2. Таблица names: id, user_id, name, usages, created_at, updated_at
  3. Таблица ip: id, user_id, ip, usages, created_at, updated_at

Мысли в слух: меньше избыточности, но несколько запросов на вставку данных, соответственно немного муторнее вставлять обновлять данные ну и получать. В промежуточной таблицы names и ip будут дублироваться данные для других игроков, так-как игрок может иметь несколько имен и имя может быть у нескольких игроков

3.
Если иметь 5 таблиц, что бы создать связь многие ко многим

  1. Таблица users: id, steamid, joins, created_at, updated_at
  2. Таблица names: id, user_id, name, created_at
  3. Таблица ip: id, user_id, ip, created_at
  4. Таблица lnk_users_names: id, user_id, name_id, created_at
  5. Таблица lnk_users_ip: id, user_id, ip_id, created_at

Мысли в слух: Практически полностью убираем избыточность, но дико усложняем запросы на вставку и обновление данных, ведь что бы вставить данные во все 5 таблиц понадобиться несколько запросов на вставку а так же возможно селектов, что бы получить id и вставить ее потом в промежуточные таблицы

Отсюда и возникает вопрос, какую связь выбирать и почему, одно дело если мы убираем избыточность, другое дело если мы добавляем больше гемора для работы со вставкой


Ответы (0 шт):