Какую книгу прочесть по проектированию баз данных?
Всем доброго времени суток.
Вопрос 1: по чуть-чуть изучаю PHP, много где слышал, что серьезные проекты начинаются с проектирования БД, чтобы потом не разгребать и не грузить сервер запросами. Накидайте, пожалуйста, толковых книг по проектированию БД, чтобы нормальные формы 1, 2, 3, 4, желательно на русском, желательно по мере наращивания скилла, чтобы от базовых навыков, и постепенно переходя к профессиональной литературе.
Вопрос 2: хочу сделать нечто вроде автопортала, где будут все ТТХ автомобилей. К примеру, автомобили делятся на автопроизводителей (бренды: Honda, Audi, Mercedes, etc.), модели (A6, Jazz, Mondeo, CLS), а также комплектации (A6 Allroad, Mondeo 2.0 Diesel, CLS 63 AMG). Кроме того, есть ещё всякие тюнинг-ателье, которые делают модификации моделей (к примеру, Mercedes-Benz CLS AMG 63 Brabus Rocket 700). Отсюда возникает вопрос: производители, модели, комплектации и модификации комплектаций - это все разные таблички? Если да, то к примеру, где должен хранится столбец с мощностью, ведь у комплектаций и модификаций они разные? Вопрос возникает к тому, что было бы удобно переходить на сайте так Mercedes » CLS » AMG 63 » Brabus Rocket, и чтобы на любом из этих урвоней (хлебных крошек) я видел другие модификации комплектаций, или комплектации. (если я не ясно выразился, то представьте себе уровень вложенности какого-то интернет-магазина: Аксессуары для велосипеда -> Вилки -> Вилки Marzocchi -> Marzocchi 888)
Вопрос 3: какая нормальная форма БД считается оптимальной и используется в большинстве проектов? Стоит ли заморачиваться для среднего или более проекта?
1. Имхо, джуну книги по бд не нужны, к тому же на русском годных книг по БД просто нету, впрочем на русском очень мало достойных книг так или иначе связанных с ИТ..по этому лучше читай документацию с офф сайта.
Ну а вообще БД в целом это громко сказано. Они бывают разные
Для начала тебе будет достаточно прочитать это.
СУБД (твой выбор) https://habrahabr.ru/company/mailru/blog/266811/
Безсхемный подход (NoSQL) https://habrahabr.ru/post/152477/
2. "Котлеты отдельно, мухи отдельно", все должно быть разделено, но при этом связанно.
Об этом почитай
Связи по внешнему ключу https://habrahabr.ru/post/193380/
3. Возможно ты имел в виду какую базу данных использовать. Я бы тебе посоветовал postgresql, но будет православно если ты начнешь с mysql, т.к если возникнут вопросы то по mysql в рунете ты найдешь больше инфы.
1. Спрашиваю по причине того, что хочу сразу научиться правильно.
2. Прочту.
3. Вы говорите о СУБД, я же говорю о нормальных формах: https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D...
Спасибо за ссылки, обязательно прочту.
Отвечаю СРАЗУ на 3 ваших вопроса:
Всегда используется промежуточная таблица связей между сущностями при реляционных БД и связях "многие-ко-многим":
объектА:ID<->LINK: объектA:ID, объектБ:ID<->объектБ:ID
Через такие связи Вы можете задавать любые взаимосвязи между сущностями вплоть до FULL-MESH (полносвязная структура данных).
Достаточно оптимизировать структуру до 3НФ. Глубже - уже избыточность.
Спасибо. На примере автомобилей, как это связать? Получается, что между таблицей brands и таблицей models должна быть таблица, скажем, cars, в которой есть поля id, brand_id, model_id? Она будет связывать бренды к моделям?
И по литературе, есть ли у вас что-то на заметке, что могли бы порекомендовать, либо ресурсы? Или хотя бы гайд лайн по какому идти пути чтобы правильно обучиться?
danforth: нет, неверно. и гайдов - тоже на примете нет.
brands, models - это сущности. таблица связей обычно делается как две таблицы: brands_models и у нё поля: ID, brandID, modelID.
Ну если это реально нужно - могу черкануть у себя в блоге статейку...