У меня есть фильтры книг по странам (отдельная таблица).
Я не делал таблице с книгами поле country_id. Чтобы узнать страну книги, я лезу в таблицу фильтров, беру id фильтра по странам (из таблицы типов фильтров) и id книги (из таблицы книг). И получаю страну конкретной книги.
Это нормально? Или лучше сделать для таблицы книг поле - страна.
Выводить страну книги приходится нечасто. Стоит ли создавать целое поле в таблице для таких редких случаев?
PHP
PHP и MySQL - что лучше - сделать в таблице меньше полей, но длиннее запрос или больше полей и короче запрос?
Уже отметили, что при проектировании базы данных главное выделить сущность.
На примере с книгами это пояснить просто. Сейчас вы придумали таблицу в которой хранится информация о книге. А дальше может потребоваться хранить изображение обложки книги. По крайней мере, во всех современных библиотечных программах вам показывают обложку. Естественно данные об обложке нужно хранить в таблице "Книга". Как их хранить - это пока не важно.
По поводу страны можно сказать, что это тоже сущность. У станы есть название и для наглядности можно базе данных хранить изображения флага.
Из этого понятно, что есть две таблицы (две сущности). Какая книга в какой стране напечатана - это связь. При этом в одних случаях вы можете не знать (пока не знать), где книга напечатана. В других случаях может оказаться, что книгу печатают сразу в нескольки странах. То есть, сразу лучше делать связную таблицу, в которой указывать id книги и id страны.
Главное, чтобы структура таблиц у вас изначально была правильная и позволяла разумное расширение, а запросы потом напишите такие как вам надо. В любом случае хранить информацию о старне в таблице "Книги" неразумно. Это понтно с примером флага. Захочется вам добавить флаг в вашу базу данных... Вы что его будете дублировать в каждой записи о книге? ;-)
На примере с книгами это пояснить просто. Сейчас вы придумали таблицу в которой хранится информация о книге. А дальше может потребоваться хранить изображение обложки книги. По крайней мере, во всех современных библиотечных программах вам показывают обложку. Естественно данные об обложке нужно хранить в таблице "Книга". Как их хранить - это пока не важно.
По поводу страны можно сказать, что это тоже сущность. У станы есть название и для наглядности можно базе данных хранить изображения флага.
Из этого понятно, что есть две таблицы (две сущности). Какая книга в какой стране напечатана - это связь. При этом в одних случаях вы можете не знать (пока не знать), где книга напечатана. В других случаях может оказаться, что книгу печатают сразу в нескольки странах. То есть, сразу лучше делать связную таблицу, в которой указывать id книги и id страны.
Главное, чтобы структура таблиц у вас изначально была правильная и позволяла разумное расширение, а запросы потом напишите такие как вам надо. В любом случае хранить информацию о старне в таблице "Книги" неразумно. Это понтно с примером флага. Захочется вам добавить флаг в вашу базу данных... Вы что его будете дублировать в каждой записи о книге? ;-)
Выделять сущность в независимую таблицу - это абсолютно правильно.
Но сам вопрос свидетельствует о том, что ни одного учебника по реляционным базам данных ты в своей жизни не читал.
Советую заглянуть в:
https://ru.wikipedia.org/wiki/Нормальная_форма
https://support.microsoft.com/ru-ru/help/283878/description-of-the-database-normalization-basics
и множество других статей на эту тему.
Без понимания нормализации заниматься созданием таблиц БД бессмысленно.
Но сам вопрос свидетельствует о том, что ни одного учебника по реляционным базам данных ты в своей жизни не читал.
Советую заглянуть в:
https://ru.wikipedia.org/wiki/Нормальная_форма
https://support.microsoft.com/ru-ru/help/283878/description-of-the-database-normalization-basics
и множество других статей на эту тему.
Без понимания нормализации заниматься созданием таблиц БД бессмысленно.
A S
Спасибо за ответ и за статьи, прочту после работы.
У меня есть таблица со странами (сущность и независимая таблица). Но нет поля country_id (id страны) в таблице книг. Мне лучше добавить его?
У меня есть таблица со странами (сущность и независимая таблица). Но нет поля country_id (id страны) в таблице книг. Мне лучше добавить его?
Поле - для связи один ко многим, у книги одна страна
Таблица - если много ко многим, например у книги несколько стран может быть
Таблица - если много ко многим, например у книги несколько стран может быть
в общем-то не обязательно делать вспомогательную таблицу самому, как выше описывали. нужные данные о стране книги можно получить одним SELECT? Ну так создайте т. н. "представление" - по create views. Оно будет обновляться автоматически. Из этой таблицы и берите данные.
Похожие вопросы
- Как сделать регистрацию и авторизацию на php без mysql. Напишите пример записи
- Посоветуйте не очень дорогой хостинг для сайта с php и MySQL.
- Можно ли делать что то на PHP без MySQL?
- PHP MYSQL после ввода запроса , отображается пустая строка перед 1 кой, немогу понять Помогите пожалуйста
- Нужна помощь c запросами и базой данных, PHP, MySQL
- Посоветуйте хостинг по дешевле, надежный, php mysql, mysql и хостинге не мало мест было?
- Два SQL запроса одновременно | PHP
- Можно ли сделать браузернаю игру зная только HTML, CSS, PHP, MySQL(без JS), ненавижу язык JS
- Планирую освоить mySQL и Php, с чего начинать? И сколько их учить? (Примерно)
- Несколько AJAX запросов на один PHP файл.
У меня есть таблица со странами (country). Но нет поля country_id (id страны) в таблице книг. Я хотел узнать - нужно ли добавлять это поле.