У меня есть пример, в котором я не совсем понимаю, как его решить оптимальным образом?
Стол под названием usuarios
.
Стол под названием publicaciones
.
Если я планирую сохранить записи сообщения с записью id
пользователя, который его зарегистрировал; верна ли следующая структура?
Но, например, учитывая, что может быть создана промежуточная таблица publicaciones-usuarios
со структурой, подобной следующей:
Каков оптимальный способ?, так как, например, если я создам первую структуру inner join
следующим образом:
SELECT titulo, cuerpo, username FROM publicaciones
INNER JOIN usuarios
ON usuarios.id = publicaciones.usuarios_id
WHERE usuarios.id = 2;
Я могу извлечь публикации, которые делает пользователь, принимая во внимание, что связь между обеими таблицами является ссылкой id
пользователя как внешний ключ в таблице publicaciones
; но я не совсем понимаю, при каких сценариях используется каждый из них
Это просто пример, учитывая, что я пытаюсь прояснить это сомнение.
сами отношения
Основной вопрос для ответа на ваш вопрос заключается не в том, могу ли я, используя этот тип отношений, получить такие данные, а используя этот другой тип отношений, я не могу их получить .
На самом деле данные можно получить одинаково при любом типе отношений, если они хорошо спланированы.
Короче говоря, мы можем сказать, что:
Отношения один ко многим
Применяется только когда:
Или наоборот:
Связь «многие ко многим»
Применяется, когда:
В зависимости от того, как настроено ваше приложение, исходя из реальности данных, которые оно обрабатывает , вам придется решить, какой тип связи реализовать.
Другими словами, какова реальность данных, которые будет обрабатывать ваше приложение?:
Оптимальный режим
Что касается оптимального способа ведения дел, как сказал @gbianchi в своем комментарии. Оптимальный режим — это тот, который оптимизирует то, что вы хотите делать в базе данных, придерживаясь бизнес-правил.
Недостаточно иметь тип отношений в соответствии с реальностью данных, с которыми вы работаете. Все еще будут незавершенные концы, которые вы должны связать в определении таблиц, такие как индексы для ускорения поиска данных, контроль дубликатов записей, добавление ограничений ссылочной целостности, которые предотвращают существование потерянных записей и т. д.
Получить данные
Какие бы отношения вы ни использовали, вы всегда можете получить нужные данные из таблиц.
Посмотрим:
Получение данных в отношении «один ко многим»
Получение данных в отношениях «многие ко многим»
В обоих примерах получаются одни и те же столбцы. Единственное, что различается, — это способ получения данных путем выполнения
JOIN
соответствующих действий в зависимости от того, как мы создали отношения.Я имею в виду, что вы не можете определить отношение, думая, что оно каким-то образом влияет на то, как вы получаете данные . Это не имеет значения. В обоих примерах мы получаем одни и те же столбцы
nombre
из таблицыusuarios
иtitulo
из таблицыpublicaciones
. И так, мы можем получить любой столбец, участвующий в отношении.Другое дело будет факт получения сгруппированных данных, например в случае отношений «многие ко многим». Для этого также существуют функции группировки, такие как
GROUP_CONCAT
, в конкретном случае MySQL.