Доброго времени суток, необходимо реализовать таблицу с заявками на различные услуги. К примеру "потребительский кредит", "получение кредитной истории", "кредит для бизнеса". Суть в том, что все заявки должны быть в одной таблице с уникальным ID независимо от типа услуги, потому что есть другие таблицы, где используется ID заявки. НО в тоже время для разных типов услуг нужны поля (столбцы), иными словами в потреб. кредит нужно 40 столбцов а для кредитной истории 8. Сейчас все хранится в одной таблице с 50-ю столбцами. Вопрос: правильный ли такой способ хранения? Ведь для той же услуги кредитной истории нужно всего 10 столбцов, а остальные 30 заполняются пустотой или 0. Возникла идея создать много таблиц под услуги и одну результирующую. К примеру "leads" - в ней будет хранится ID, дата получения заявки, услуга. А дальше в зависимости от услуги будет JOIN к таблице этой услуги. Таком образом под каждую услугу будет свой перечень полей (столбцов) и уникальные ID за счет главной таблицы "leads". Если нужно вывести только заявки определенной услуги - проблем нет. Обычный джоин. А бывает нужно получить 100 заявок не зависимо от типа, то есть получить все поля, вот тогда придется делать несколько запросов в разные таблицы. Посоветуете как быть?
@MasterDmx, делай так. Несколько запросов (а их у тебя будет ну 3-4, сколько там этих услуг ты написал) - это не панацея. Вот 100 запросов на странице - нехорошо.
во-первых дофига колонок проблема только для людей, они в них путаются. Программы не путаются. Мускул может доусрачки колонок. Ему ок. во-вторых, если чешется и хочется чтобы прям глаз радовало и концептуально красиво то надо завести одну головную таблицу с общими полями типа клиента там, описания. И несколько таблиц под услуги, у которых айдишник будет не инкрементным, а браться из головной таблицы. Я просто не уверен, что правильно понял ваше описание. Если вы именно так хотите, то да, это будет красиво. Только не забывайте про транзакции, блокировки и всё такое.
Не, я как раз не путаюсь, в одной мне удобнее. Но я опасаюсь, что со временем выборки начнут тормозить. Плюс если одна таблица и нужно добавить колонку для какой-то одной услуги, то число пустых полей возрастает, а вызывается то все равно все поля в таблице. Вот я и подумал, что вдруг несколькими запросами будет быстрее чем 1
Еще есть вопрос по реализации структуры lead,field,value. То есть у нас есть база с "общими полями типа клиента". Потом есть база с полями и есть база со значением этих полей "lead_data", где каждая строчка это значение определенного поля. Данный способ рекомендуют, когда число столбцов не фиксированное, то есть не знаешь сколько именно столбцов будет. Но при таком подходе я не могу сообразить как сделать выборку по двум и более полям. Вот такой запрос в итоге получается для выборки из одного поля: Код (Text): SELECT id,name FROM leads WHERE id IN (SELECT lead FROM lead_data WHERE field="3" AND value="1" GROUP BY lead) В голову приходит только вариант, где под каждое поле придется делать отдельный подзапрос. К примеру field="3" AND value="1" - один подзапрос, field="5" AND value>"1" второй подзапрос и так далее. Так делать не вариант, потому что бывает нужна выборка по 10 полям сразу. Может есть другой способ сделать выборку при такой структуре?
дожить бы до этого --- Добавлено --- это капец, не делай так никогда, забей. Так делают все, и это жопа полная. Делай несколько таблиц если руки чешутся. --- Добавлено --- и это только начало. Забей. Делай несколько таблиц.