Давно мучает вопрос: имеет ли смысл создание связей между таблицами (например в MySQL Workbench), если все пользуются JOIN?
Сижу я создаю диаграмму в нотации IDEF1X (MySQL Workbench) и понимаю, что связи придется удалить, так в чем же смысл?
Может я что-то делаю или понимаю не так?
Как делается выборка из связанных таблиц? Или в чем отличие в выборке из связанных и не связанных таблиц?
В прочитанной литературе этот вопрос как-то обходится стороной...
Надеюсь, что понятно сформулировал вопрос, буду благодарен за полезные ссылки.
Не стоит повторять чужие косяки, уповая на то, что уж в коде-то вы сделаете чистку БД. Нет, не сделаете, и в базе будет мусор. Не говоря уже об использовании визуальных средств проектирования БД, где связи упрощают понимание. Связи страхуют вас еще и на уровне обязательного соответствия типов в первичном ключе и ссылках на него (буквально на днях столкнулся с PK в int, и ссылке на него в виде varchar).
Такое отношение к Foreign Keys как к необязательному у разработчиков на PHP + MySQL видимо типично, т.к. до недавних пор MySQL массово всего этого не умел совсем (да и сейчас проблемы есть - типа не отрабатывающих триггеров в каскадных удалениях и апдейтах, FTS на InnoDB только с 5.6). В отличие от баз, которые изначально с оглядкой на энтерпрайз писались - Firebird (Interbase в девичестве), PostgreSQL. И куча книжек класса "Магазин на PHP+MySQL за 5 минут для тупых" это тиражируют похоже до сих пор.
Я, к сожалению, с MySQL только по работе общаюсь, и всего 4 месяца. Но в моем коллективе уровень знания SQL откровенно низкий (используют MySQL в основном как хранилище данных с SQL синтаксисом, про хранимки и триггеры вообще никакой речи).
По PostgreSQL больше знаний, ей пользуюсь лет уже так 15, там можно читать документацию официальную, она очень приличная. Теорию изучал в свое время по какому-то учебнику на citforum.ru вроде (уже не вспомню за давностью лет). Там, кстати, много всяких документов интересных именно про PostgreSQL.