Всем привет! Делаю подобие доски объявлений...
Структура таблицы такая:
ads - таблица объявлений и общие значения типа "id", "заголовок", "описание", "цена"
fields - дополнительные поля (id поля, тип (список, число, текст, возможные ограничения и т.д.))
fields_value - значения полей, которые будут хранить id объявления, id поля и само значение
получается, что в последнюю таблицу (
fields_value) нужно записать значения полей не зависимо от его типа в таблице `
fields`. На ум приходит только формат ячейки
VARCHAR, потому как числовые значения, текстовые до 255 символов или номер списка в любом случае будут в пределах, разрешенных в таблице `
fields`. Но встает вопрос производительности. Например нужно найти объявления из категории "автомобили" где объем двигателя больше 2000куб.см. Выходит, что запрос нужно делать таким:
SELECT ads.*, fields_value.*
FROM `fields_value`
LEFT JOIN `ads` ON fields_value.`ad_id` = `ads`.`id`
WHERE `fields_value`.`val` > 2000 AND `ads`.`category_id` = 1
Но в
`fields_value`.`val`, как я уже описал выше, могут ведь храниться и текстовые данные (если вдруг в объявление будет добавлено текстовое поле).
Как быть в таком случае? И что если вдруг в будущем стрельнет в голову сделать возможным добавлять не только текстовые поля до 255символов, а большие, в формате текст? Хотя второй вопрос не так актуален, ибо большой текст - это как правило только описание, которое можно хранить в отдельном поле
TEXT в таблице `ads`.
Либо я создал совершенно не правильную структуру?