MYSQL хранение идентификатора или описательного текста для производительности - PullRequest
1 голос
/ 17 февраля 2012

Извините за недостаток знаний. Я создаю сайт php / mysql, который будет хранить записи для рекламы для различных автомобилей. Каждая запись объявления будет содержать данные о модели и марке автомобиля, а также описание, цену и т. Д ...

В моей форме создания объявления у меня есть 2 поля для выбора марки и модели автомобиля из таблиц, которые содержат идентификаторы и марки автомобилей для всех марок, а также идентификаторы, марки автомобилей и модели автомобилей для всех моделей.

У меня вопрос: когда я выбираю данные в форме создания рекламы, лучше ли получить идентификатор и марку машины, а затем просто сохранить «идентификатор» в моей таблице объявлений или я должен сохранить фактическую марку машины? "и" модель автомобиля "в моей таблице объявлений в моей базе данных?

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

Будет ли это намного лучше для производительности? или это не имеет никакого значения, чем просто сохранять марку и модель автомобиля в каждой записи объявления, поэтому мне не нужно было объединяться, чтобы отобразить их позже?

Ответы [ 3 ]

0 голосов
/ 17 февраля 2012

Храните идентификаторы.Помимо производительности, это дает вам правильную нормализацию ваших данных.

Рассмотрим случай, когда производитель меняет название с «Датсун» на «Ниссан».Сохраняя идентификаторы, вы вносите изменения только в одном месте таблицы поиска.Если вы сохранили имена, вам нужно будет обновить каждую строку объявления, содержащую «Datsun».

0 голосов
/ 17 февраля 2012

Вы говорите о нормализации (де) схемы базы данных.Я настоятельно рекомендую хранить идентификаторы и делать соединения при получении данных.Затем, немного позже, после того, как у вас будет очень много и много трафика, вы можете начать думать о денормализации своей схемы (то есть, в том числе "inline" ... для повышения производительности).

0 голосов
/ 17 февраля 2012

Подумайте, как люди будут использовать сайт. Вероятно, пользователи найдут способ поиска по марке или модели. Поэтому важно, чтобы информация была нормализована. Если во время создания листинга люди напишут «Chevy», а другие - «Chevrolet», это вызовет все виды проблем. Лучше иметь таблицу Makes с этой информацией и иметь внешнее поле make_id в таблице объявлений.

...