PHP

PHP и MySQL - что лучше - сделать в таблице меньше полей, но длиннее запрос или больше полей и короче запрос?

У меня есть фильтры книг по странам (отдельная таблица).
Я не делал таблице с книгами поле country_id. Чтобы узнать страну книги, я лезу в таблицу фильтров, беру id фильтра по странам (из таблицы типов фильтров) и id книги (из таблицы книг). И получаю страну конкретной книги.
Это нормально? Или лучше сделать для таблицы книг поле - страна.
Выводить страну книги приходится нечасто. Стоит ли создавать целое поле в таблице для таких редких случаев?
A S
A S
242
Уже отметили, что при проектировании базы данных главное выделить сущность.

На примере с книгами это пояснить просто. Сейчас вы придумали таблицу в которой хранится информация о книге. А дальше может потребоваться хранить изображение обложки книги. По крайней мере, во всех современных библиотечных программах вам показывают обложку. Естественно данные об обложке нужно хранить в таблице "Книга". Как их хранить - это пока не важно.

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

Из этого понятно, что есть две таблицы (две сущности). Какая книга в какой стране напечатана - это связь. При этом в одних случаях вы можете не знать (пока не знать), где книга напечатана. В других случаях может оказаться, что книгу печатают сразу в нескольки странах. То есть, сразу лучше делать связную таблицу, в которой указывать id книги и id страны.

Главное, чтобы структура таблиц у вас изначально была правильная и позволяла разумное расширение, а запросы потом напишите такие как вам надо. В любом случае хранить информацию о старне в таблице "Книги" неразумно. Это понтно с примером флага. Захочется вам добавить флаг в вашу базу данных... Вы что его будете дублировать в каждой записи о книге? ;-)
Мадияр Аскаров
Мадияр Аскаров
60 474
Лучший ответ
A S Спасибо за ответ.
У меня есть таблица со странами (country). Но нет поля country_id (id страны) в таблице книг. Я хотел узнать - нужно ли добавлять это поле.
Выделять сущность в независимую таблицу - это абсолютно правильно.

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

Советую заглянуть в:
https://ru.wikipedia.org/wiki/Нормальная_форма
https://support.microsoft.com/ru-ru/help/283878/description-of-the-database-normalization-basics
и множество других статей на эту тему.

Без понимания нормализации заниматься созданием таблиц БД бессмысленно.
Yusuf Kara
Yusuf Kara
94 612
A S Спасибо за ответ и за статьи, прочту после работы.
У меня есть таблица со странами (сущность и независимая таблица). Но нет поля country_id (id страны) в таблице книг. Мне лучше добавить его?
Поле - для связи один ко многим, у книги одна страна
Таблица - если много ко многим, например у книги несколько стран может быть
в общем-то не обязательно делать вспомогательную таблицу самому, как выше описывали. нужные данные о стране книги можно получить одним SELECT? Ну так создайте т. н. "представление" - по create views. Оно будет обновляться автоматически. Из этой таблицы и берите данные.
Сергей Бударин
Сергей Бударин
75 285