Как лучше спроектировать базу данных
Сфера тематики: cs
Задача: Иметь список всех никнеймов и ip-адресов игрока
Вопрос: Какое отношение связей выбрать?
Наиболее частые запросы: update and insert
Редкие запросы: select
1.
Если иметь 1 таблицу получим много повторяющих данных, например:
Имеем таблицу: id, steamid, ip, name, created_at, updated_at
Мысли в слух: Если имя у игрока сменится, то мы снова добавим строчку с теме же данными steamid и ip, получается дублирование данных. Забиваем диск избыточной информацией, но вставка и чтение данных будет проще
2.
Если иметь 3 таблицы
- Таблица users: id, steamid, joins, created_at
- Таблица names: id, user_id, name, usages, created_at, updated_at
- Таблица ip: id, user_id, ip, usages, created_at, updated_at
Мысли в слух: меньше избыточности, но несколько запросов на вставку данных, соответственно немного муторнее вставлять обновлять данные ну и получать. В промежуточной таблицы names и ip будут дублироваться данные для других игроков, так-как игрок может иметь несколько имен и имя может быть у нескольких игроков
3.
Если иметь 5 таблиц, что бы создать связь многие ко многим
- Таблица users: id, steamid, joins, created_at, updated_at
- Таблица names: id, user_id, name, created_at
- Таблица ip: id, user_id, ip, created_at
- Таблица lnk_users_names: id, user_id, name_id, created_at
- Таблица lnk_users_ip: id, user_id, ip_id, created_at
Мысли в слух: Практически полностью убираем избыточность, но дико усложняем запросы на вставку и обновление данных, ведь что бы вставить данные во все 5 таблиц понадобиться несколько запросов на вставку а так же возможно селектов, что бы получить id и вставить ее потом в промежуточные таблицы
Отсюда и возникает вопрос, какую связь выбирать и почему, одно дело если мы убираем избыточность, другое дело если мы добавляем больше гемора для работы со вставкой