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

Как лучше организовать структуру базы данных для хранения фраз героев в игре, чтобы обеспечить понятность и легкость отслеживания при большом объеме записей: создать одну таблицу для всех героев с полем имени героя и его фразой, или создать отдельную таблицу для каждого героя с полями для фразы и уникальным ID?
  • 29 марта 2024 г. 22:49
Ответы на вопрос 3
Для создания хорошо структурированной базы данных для хранения фраз героев в игре, лучше использовать подход с отдельной таблицей для каждого героя. Это позволит оптимизировать работу с базой данных и обеспечить более эффективное отслеживание и управление данными.

Каждая отдельная таблица будет содержать поля для фразы героя и уникального ID, который может использоваться для идентификации конкретного героя. Такой подход позволит легко добавлять, обновлять и удалять данные по каждому отдельному герою без необходимости изменения структуры всей базы данных.

Это также упростит выполнение запросов и фильтрацию данных, так как каждая таблица будет содержать информацию только о конкретном герое. Кроме того, при большом объеме записей такая структура базы данных будет более масштабируемой и эффективной с точки зрения производительности.
С точки зрения адекватного проектирования баз данных — однозначно первый вариант (и, желательно, с индексом по имени героя). А если очень хочется просматривать отдельные выборки по героям без дополнительных действий — использовать для этого такую штуку как Views, если база их поддерживает и позволяет редактировать. Но вообще, во всех нормальных менеджерах баз данных есть возможность выборки с фильтрацией по содержимому поля, и лучше использовать их.

Но есть "проблема". При добавлении новой фразы для героя, она всегда будет в конце таблицы т.к. это новая запись.
Т.е. при дополнении таблицы фразами - для 1 героя, для второго, придумали новую фразу для 1 героя, они будут идти в разнобой. Это визуально не удобно для отслеживания, понимания, не красиво.

Это не проблема. При выборке фраз ты можешь спокойно указать нужный порядок.

База данных - это не эксель, и даже в экселе это не было бы проблемой благодаря сортировкам.

Первое что приходит на ум - Одна таблица для всех героев с 3 полями
id - автоинкремент
имя героя
фраза героя

Лучше для героев завести отдельную таблицу, а в этой таблице держать только id героя.

Вариант 2. Для каждого героя своя таблица. Таблица Hero1 Hero2 и т.д.
id - автоинкремент
фраза героя
И далее, делать выборку всех записей из таблицы т.к. в ней фразы для нужного героя.
Просто, интуитивно понятно, все фразы идут "друг за другом", но много таблиц.

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

Тебе должно быть пофиг, как эти данные структурируются с точки зрения человека.
Структурируй с точки зрения запросов и программы, которая будет с этими данными работать.
Похожие вопросы