Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно составить базу (пример AVITO), правильно создать архитектуру таблиц 
V
    Опции темы
numerovan
Дата 6.8.2014, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Здравствуйте. 
Решил сделать сайт на подобие AVITO.ru. Покопавшись в фильтре сайта и посмотрев перечень услуг данного сайта понял что лучше посоветоваться тут с людьми, потому что там много разных вариантов выбора чего либо.

Посмотрите пожалуйста там весь перечень сортирования.
Как на ваш взгляд лучше организовать таблицы в базе данных?
PM MAIL   Вверх
Cheloveck
Дата 7.8.2014, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Для того, чтобы разарботать схему БД, обычно собирается группа умных дядек (человек 5-10) и начинают долго и муторно обсуждать задачи, которые должна решать система. Потом рисуют много схем. Потом пишут спайк (черновик) проекта, который оценивает жизнеспособность придуманной системы. Попутно в схему вносятся изменения и улучшения. Также меняются задачи и их решения. После того, как спайк написан, все эти дядьки снова начинают обсуждать, что получилось, а что нет. Если всё устраивает, выбрасывают спайк и начинают писать новую систему с нуля, с учётом всех замечаний выяленных на последнем обсуждении.
Всё это, для проектов масштаба Avito, занимает примерно 1-3 месяца. Ты хочешь, чтобы тебе здесь сейчас на-гора выдали схему?  smile 


--------------------
user posted image
PM Jabber   Вверх
numerovan
Дата 7.8.2014, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Да, понимаю - не простая задача, поэтому сюда решил обратиться. Ведь от составления базы зависит и быстродействие и т.д.

Думаю нужно спросить более по точнее. Вопрос не закрыт, если что буду отписывать сюда идеи.
PM MAIL   Вверх
tzirechnoy
Дата 7.8.2014, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Самые базовые атрибуты (автора, цэну, дату, вероятно город) -- пишэшь в основную табличку, видимо, вместе с текстом объявления (вероятно, с вменяемыми словарями, т.е. явно в этой табличке должны быть ссылка на автора, а не ФИО).
Остальное (типы подвидов вещей и пр.) -- в виде key-value pairs со ссылками на эту таблицу.

Добавлено через 5 минут и 58 секунд
И да, я никогда не видел, чтобы 10 человек сидели и обсуждали конкретное SQL хранилище. Ни 3 месяца, ни 3 дня. На мозговой штурм такую гопу народа -- можно согнать, но это несколько часов (да и совершэнно непонятно, нафига оно для такой очевидной инжэнерной задачи). 

 Ещё можно согнать кучу аналитиков из цэлевых бизнес-областей, которые будут накидывать бизнес-требования, ну, в данном случае -- онтологии. Не то, чтобы это обязательно, и один вменяемый онтолог не справится с построением классификацыи уровня Авито (тем более, что любая один раз построенная классификацыя таких вещей -- это не окончательная в граните отлитая истина, а некоторая точка отсчёта). Но нагнать толпу аналитиков дейстивтельно реально, вот Вася будет классифицыровать мотоцыклы, а Петя -- текстильные изделия. 
 Но эти аналитики -- именно классифицыруют, техническое проектировани базы -- работа для одного архитектора или максимум для парной работы если очень уж хочется.
PM MAIL   Вверх
Cheloveck
Дата 7.8.2014, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(tzirechnoy @  7.8.2014,  14:26 Найти цитируемый пост)
И да, я никогда не видел, чтобы 10 человек сидели и обсуждали конкретное SQL хранилище. Ни 3 месяца, ни 3 дня. На мозговой штурм такую гопу народа -- можно согнать, но это несколько часов (да и совершэнно непонятно, нафига оно для такой очевидной инжэнерной задачи). 

Тут есть два варианта: 
1. Один-два человека за два часа рисуют схему и сразу пишут проект. Тогда придётся корячить схему уже в продакшене, когда всё начнёт адово тормозить. В лучшем случае удастся всё  зарефакторить и перелить существующие данные в новую схему. В худшем -- придётся выкинуть проект и переписать всё с нуля. Второй вариант грозит лишением премии и иными неприятными вещами, так как заказчик будет вынужден оплачивать разработку второй раз.
2. Потратить месяц-два на продумывание всех аспектов и тюнинг всех запросов и получить дополнительную премию.

Добавлено через 2 минуты и 31 секунду
Цитата(tzirechnoy @  7.8.2014,  14:26 Найти цитируемый пост)
И да, я никогда не видел

Возможно, что ты никогда не занимался хайлоадом...


--------------------
user posted image
PM Jabber   Вверх
tzirechnoy
Дата 7.8.2014, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Цитата
Возможно, что ты никогда не занимался хайлоадом...


Возможно, учитывая, что это вопрос определений.
А вот ты, похожэ, вообще никогда не делал схем SQL баз данных, и не работал плотно с приличными СУБД -- максимум -- или однострочные запросы или через данный свышэ орм к данной свышэ схеме.
PM MAIL   Вверх
numerovan
Дата 8.8.2014, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Собрал все необходимые значения таблиц. После просмотра этих всех данных, не составляет труда собрать эти таблицы и дать названия как они этого заслуживают, т.е. например (перчислю некоторые таблицы):
- Марки сотовых телефонов
- Модели сотовых телефонов, будет определяться от марки сотового телефона
- Пол человека: мужчина, женщина (что-то жалковато создавать целую таблицу только для двух этих значений, но что поделаешь, придется)
... и т.д. в таком духе

Далее нужно определится с самими объявлениями, т.е. что у конкретного объявления является обязательным параметром, а что нет. Заметил что в некоторых объявлениях заголовок есть, а в некоторых нет ... но во всех есть ключевые моменты это - текст описания, цена и загрузка изображения (либо логотипа).

Вот осн. критерии объявлений:

это как бы самые главные родители
Код

-- Транспорт --
-- Недвижимость --
-- Работа --
-- Услуги --
-- Личные вещи --
-- Для дома и дачи --
-- Бытовая электроника --
-- Хобби и отдых --
-- Животные --
-- Для бизнеса --


 далее идут их потомки
Код

// для транспорта к примеру вот это
Автомобили с пробегом
Новые автомобили
Мотоциклы и мототехника
Грузовики и спецтехника
Водный транспорт
Запчасти и аксессуары


К чем я это указал тут: сделать столько разновидностей объявлений сколько этих и потомок существует, допустим категория "Автомобили с пробегом" ... теперь тут нужно определится какие параметры будет содержать таблица, что нужно обязательно, а что нет. Что нам нужно будет обязательно в данной категории? По любому цена, текст описания, конкретная марка машины (модель не обязательна), пользователь кто это создал, дата создания, дата изменения ... остальные все приблуды как дополнительные опции, это касается и фотографий, хотя фото тоже можно сделать обязательным параметрам, как вы думаете?

И что получается в итоге: примерно 30 разновидностей объявлений и столько же таблиц отведенных к ним .... в добавок к этим таблицам, конечно же еще нужны таблицы описывающие названия чего либо по id, а в таблицы с объявлениями, в доп. опции, вставляются только конечно же id других значений таблиц.

Я так себе вижу эту ситуацию. Что вы думаете по этому поводу? Есть ли варианты упростить все это?
PM MAIL   Вверх
tzirechnoy
Дата 8.8.2014, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Цитата
- Пол человека: мужчина, женщина (что-то жалковато создавать целую таблицу только для двух этих значений, но что поделаешь, придется)


В фэйсбуке, говорят, этот справочник ужэ на 50 элементов. Так что всё ещё впереди.

Цитата
Есть ли варианты упростить все это?


Есть.
PM MAIL   Вверх
numerovan
Дата 8.8.2014, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Цитата(tzirechnoy @  8.8.2014,  16:42 Найти цитируемый пост)
В фэйсбуке, говорят, этот справочник ужэ на 50 элементов. Так что всё ещё впереди.

Сейчас я думаю что и в будущем инопланетяне мне не нужны будут ))) , хотя хз

Добавлено через 4 минуты и 51 секунду
по поводу упрощения:
допустим нужно будет создать таблицы описывающие названия стран, метро, марки атомобилей, пола человека и т.д. ... для удобства можно разделить их в разные таблицы, но можно и все эти значения поместить в одну таблиц и по id цеплять их, получается вроде каша, но зато используется одна таблица, что наверняка ускорит работу ....
Что думаете по этому поводу: разделять лучше или все в одну таблицу? Это не касается самих объявлений и таблицы пользователей сайта.
PM MAIL   Вверх
tzirechnoy
Дата 12.8.2014, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



То, что есть во всех рубриках и почти у всех сообщений: текст, автор, цэна, рубрика, список фоток -- выкидывать в отношэния как обычно. То, что встречается не везде: цвет и марка машыны, площадь участка -- в EAV.
PM MAIL   Вверх
numerovan
Дата 12.8.2014, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



собираю базу, уже наклепал 150 таблиц, как закончу выложу сюда для общего обозрения, если что подскажете что нибудь, спасибо.
PM MAIL   Вверх
numerovan
Дата 14.8.2014, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Хотелось бы показать вам следующее:
Код

// TITLE - заголовок объявления 
// DESC - описание объявления
// COST - цена объявления

ad_auto_used_car(mark, model, year, probeg, body, color, V_dvig, transm, TypeDvig, Privod, Ryl, Status, DESC, COST)
        ad_auto_new_car(mark, model, body, V_dvig, transm, TypeDvig, Privod, power, DESC, COST)
        ad_auto_moto(kind, motocikle_kind, TITLE, DESC, COST)
        ad_auto_truck(вид, TITLE, DESC, COST)
        ad_auto_water_car(вид, TITLE, DESC, COST)
        ad_auto_parts_and_accessories(вид, запчасти для, запчасти для автом, вид противоугонных устр, тип шин, диаметр, сезонность, ширина профиля, высота профиля, ось, тип тиска, ширина обода, кол-во осверстий, диаметр распол. отв, ЕТ, TITLE, DESC, COST)
        -----------------------------
        ad_reality_flat(тип, количество комнат, вид объекта, этаж, этажей в доме, тип дома, площадь, адрес, срок аренды, DESC, COST)
        ad_reality_rooms(тип, комнат в квартире, этаж, этажей в доме, тип дома, площадь комнаты, адрес, срок аренды, DESC, COST)
        ad_reality_house(тип, вид объекта, этажей в доме, материал стен, расстояние до города, пщадь дома, площадь участка, адрес, срок аренды, DESC, COST)
        ad_reality_land(тип, категория земель, расстояние до города, площадь, адрес, DESC, COST)
        ad_reality_garage(тип, вид объекта, опция, площадь, охрана, адрес,  DESC, COST)
        ad_reality_commercial_real_estate(тип, вид объекта, класс здания, срок аренды, площадь, адрес, TITLE, DESC, COST)
        ad_reality_property_abroad(тип, вид объекта, страна, срок аренды, DESC, COST)
        -----------------------------
        ad_work_vacancy(сфера деят, график работы, опыт, название вакансии, DESC, COST)
        ad_work_resume(сфера деят, график работы, опыт, образ, пол, возраст, желаемая должность, DESC, COST)
        -----------------------------
        ad_service_offers(kind, доп опция, TITLE, DESC, COST)
        ad_service_request(kind, доп опция, TITLE, DESC, COST)
        -----------------------------
        ad_clothes_clothing_and_footwear(kind, доп опция, размер, TITLE, DESC, COST)
        ad_clothes_сhildrens_clothing(kind, доп опция, размер, TITLE, DESC, COST)
        ad_clothes_products_for_children(kind, TITLE, DESC, COST)
        ad_clothes_watches_and_jewelry(kind, TITLE, DESC, COST)
        ad_clothes_beauty_and_health(kind, TITLE, DESC, COST)
        -----------------------------
        ad_home_and_garden_appliances(kind, доп. опция, TITLE, DESC, COST)
        ad_home_and_garden_furniture(kind, TITLE, DESC, COST)
        ad_home_and_garden_tableware(kind, TITLE, DESC, COST)
        ad_home_and_garden_foodstuffs(TITLE, DESC, COST)
        ad_home_and_garden_repair(kind, TITLE, DESC, COST)
        ad_home_and_garden_plants(TITLE, DESC, COST)
        -----------------------------
        ad_consumer_electronics_audio_video(kind, TITLE, DESC, COST)
        ad_consumer_electronics_games(kind, TITLE, DESC, COST)
        ad_consumer_electronics_desktops(TITLE, DESC, COST)
        ad_consumer_electronics_laptops(TITLE, DESC, COST)
        ad_consumer_electronics_office_equipment(kind, kind_расходные материалы, TITLE, DESC, COST)
        ad_consumer_electronics_tablets(kind, kind_accesuary, TITLE, DESC, COST)
        ad_consumer_electronics_phone(kind, kind_accesuary, TITLE, DESC, COST)
        ad_consumer_electronics_products_for_PC(kind, kind_komplektyuwie, TITLE, DESC, COST)
        ad_consumer_electronics_phototechnique(kind, TITLE, DESC, COST)
        -----------------------------
        ad_hobby_ticket(kind, TITLE, DESC, COST)
        ad_hobby_bicycle(kind, TITLE, DESC, COST)
        ad_hobby_books(kind, TITLE, DESC, COST)
        ad_hobby_сollectables(kind, TITLE, DESC, COST)
        ad_hobby_musical_instruments(kind, TITLE, DESC, COST)
        ad_hobby_hunting(TITLE, DESC, COST)
        ad_hobby_sport(kind, TITLE, DESC, COST)
        ad_hobby_dating(name, old, s_kem_poznakonitsya, target, DESC)
        -----------------------------
        ad_animal_dogs(poroda, TITLE, DESC, COST)
        ad_animal_cats(poroda, TITLE, DESC, COST)
        ad_animal_bird(TITLE, DESC, COST)
        ad_animal_aquarium(TITLE, DESC, COST)
        ad_animal_other(kind, TITLE, DESC, COST)
        ad_animal_products(TITLE, DESC, COST)
        -----------------------------
        ad_business_ready(kind, TITLE, DESC, COST)
        ad_business_equipment(kind, TITLE, DESC, COST)
        -----------------------------

ad_auto_used_car(пареметры) - названия отдельной таблицы для объявлений, а "параметры" это названия столбцов  втаблице. Решил выразить это таким образом.

Что думаю по этому поводу: таблиц для объявлений конечно еще больше стало, но зато каждая таблица под конкретную тематику, с одной стороны теперь у объявлений нет определенного своего ID как на Авито, конечно есть свое в таблице куда она приписана. Можно конечно сделать одну таблицу для всех объявлений, но при этом там столбцов будет штук 30-40 думаю и потом придется постоянно вычислять какие столбцы принадлежат конкретной категории объявлений.

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

Как вообще думаете?


PM MAIL   Вверх
numerovan
Дата 14.8.2014, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Или лучше одну таблицу сделать под все объявления, столбцов конечно будет многовато, но думаю ни чего страшного. Что скажете?

Это сообщение отредактировал(а) numerovan - 14.8.2014, 19:04
PM MAIL   Вверх
tzirechnoy
Дата 14.8.2014, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Судя по тому, что ты не слушаешь совсем мои советы -- мне совершэнно незачем их советовать.
PM MAIL   Вверх
numerovan
Дата 14.8.2014, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Цитата(tzirechnoy @  12.8.2014,  16:32 Найти цитируемый пост)
То, что есть во всех рубриках и почти у всех сообщений: текст, автор, цэна, рубрика, список фоток -- выкидывать в отношэния как обычно. То, что встречается не везде: цвет и марка машыны, площадь участка -- в EAV. 


Общее что у все есть, так это только параметр "Описание объявления", а в других случаях то цены нет, то заголовка нет и т.д.

Что в итоге получается, если использовать вашу методику:
1. основная таблица объявлений
2. доп. таблица объявлений (EAV, что это значит я не знаю, но не суть, главно там лежат параметры отличающиеся по отношению к другим объявлениям)

В осн. таблице сделать поля: id, user, desc, время создания
А в другой таблице остальные все 30 параметров ... может тогда во едино все запихнуть? и получится таблица с 34 параметрами ... к чему клоню - разделение какое не выгодное.

Может я не прав, поправьте пожалуйста... 

PM MAIL   Вверх
Zloxa
Дата 14.8.2014, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(tzirechnoy @  12.8.2014,  17:32 Найти цитируемый пост)
То, что встречается не везде: цвет и марка машыны, площадь участка -- в EAV. 

Ога, а потом умри на отборе. Ибо, как всегда внезапно окажется, что к предикатам отбора надо будет применять не только OR, но еще и AND, а предикаты, как назло окажутся один неселективнее другого.

Но, через это таки надо пройти  smile 

Цитата(numerovan @  14.8.2014,  22:48 Найти цитируемый пост)
EAV, что это значит я не знаю

http://lmgtfy.com/?q=EAV&l=1

Цитата(numerovan @  7.8.2014,  00:26 Найти цитируемый пост)
сайт на подобие AVITO.ru

Я полагаю, что  РБД не лучшая платформа для подобных решений. Вполне возможно что я заблуждаюсь ввиду полного отсутствия познаний в нереляционных БД и слишком хорошо о них думаю. Мои размышления базируются на том, что организации подобного рода данных не нужна реляция, не нужен ACID и не нужны не малые издержки на всю эту хреноту. Возможно какое то гибридное решение - РБД на этапе ввода, модерации и классификации, потом постановка на нереляционную витрину, оптимизированную для отбора.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
numerovan
Дата 14.8.2014, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



В общем прочитал я про EAV, любопытный конечно подход, но что-то эту модель критикуют часто.
Вот интересная статья http://zlob.in/2013/01/struktura-tablic-dl...ernet-magazina/
Еще вот это вот интересно http://fenix.kiev.ua/eav_vs_row_modeling_t...i_na_postgresql

Какой отсюдова делаю вывод:
1. EAV не использовать, а использовать ROW MODELING (все таки части будут забиваться NULL-ами)
2. Создать таблицу главных сущностей, вписать туда то что есть общее во всех объявлениях
3. Для каждой категории сделать свою таблицу, тогда получится таблиц 53.
4. Далее программным путем распределять объявления по этим таблицам, а если делать общий поиск, то придется перебирать искомую фразу во всех этих таблицах ... а что делать!?

На мой взгляд это более нейтральный подход к быстродействию, редактированию и удобству хранения.

Что скажете?
PM MAIL   Вверх
tzirechnoy
Дата 15.8.2014, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Цитата
а в других случаях то цены нет, то заголовка нет и т.д.


Цэны нет только у денег. Да и то, FOREX что-то такое предоставляет.

Заголовок -- тожэ обязательная часть вежливого сообщения.
Список фоток можно ещё в единую таблицу (один-ко-многим или многие-ко-многим).

Цитата
На мой взгляд это более нейтральный подход к быстродействию, редактированию и удобству хранения.


Вполне жызненно. В отличие от идеи хранить DESC/user в каждой таблицэ отдельно.
Можно ещё пообъединять в иерархию таблиц: объединить, например, новые и БУ автомобили, выкинуть только отличия в разные таблицы.

Но, истинно говорю тебе, хорошые индэксы при большых объёмах и потоках данных делают пенальти скорости от EAV ничтожным. А классификатор, который редактируется  только через DDL и программируется только через строковые шаблоны -- тяжёл в поддержке.
PM MAIL   Вверх
Zloxa
Дата 15.8.2014, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(tzirechnoy @  15.8.2014,  11:47 Найти цитируемый пост)
хорошые индэксы при большых объёмах и потоках данных делают пенальти скорости от EAV ничтожным

ну ну.
поведай плиз какие "индэксы хоршы" для отбора вроде
Код

where sex = 'male' and country = 'Russia'
order by birth_date desc
limit 100

если sex, country и birth_date хранятся в вертикалке.

Это сообщение отредактировал(а) Zloxa - 15.8.2014, 13:35


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
tzirechnoy
Дата 15.8.2014, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Цитата
поведай плиз какие "индэксы хоршы" для отбора вроде


Чаще всего -- отдельный индэкс на (type=const('birth_date'), value) выдаёт очень близкий к нужному результат. В смысле -- что скорость выборки не слишком отличается от оптимальной.

В остальных можно выкручиваться: например, сделать EAV-таблицу через view на реальное EAV и комплект ускорятелей с индэксами.

PS Кстати, топикстартеру: про country='' -- очень правильное замечание, регион такжэ должэн являться свойством основной таблички.
PM MAIL   Вверх
numerovan
Дата 18.8.2014, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 549
Регистрация: 1.12.2007

Репутация: нет
Всего: 2



Создал таблицы, упорядочил как мог, вот что в итоге получилось если ориентироваться на сайт Avito.ru:

1. Создал основную конечно же таблицу для объявлений
http://ipicture.kz/images/2014/08/jftuaazqmq02ne2a08ym.jpg
  •  category - определяет к какой категории принадлежит объявление
  •  title - заголовок, и да, он нужен постоянно, просто иногда, в некоторых разделах, он гинерируется программой
  •  description - пользовательское описание объявления, оно есть в каждом объявлении
  •  tel - телефон в любом случае
  •  email - мэйл в любом случае
  •  city_id - город, в моем случае городов не много
  •  ip - на всякий случай, а то ведь объявления и без регистрации будет приниматься
  •  private - отвечает за частное объявление или компании
  •  first_name - тоже нужен в любом случае, чтоб знать к кому обращаться
  •  price - цена, но в категории знакомств людей там будет стоять NULL, в др. случаях цифра включая 0 (ноль)
  •  user_id - айди юзера, того кто уже является разегистрированным
  •  photos - тут будут ссылки на фото хранится, через запятую или объектом в виде строки
  •  hide - открыто/закрыто объявление
  •  allow_mails - разрешает получать письма пользователю от портала
  •  time_create - время создания
  •  time_edit - время редактирования
2. Далее создал одну таблицу в каторых помещаются те объявления, каторые состоят из одной доп. опции или двух доп. опций. В этой таблице хранятся id-шки от других таблиц. Если к примеру выбирая категорию из меню объявлений и данная категория имеет только одну подкатегорию, то второе значение в этой таблице, конечно же остается NULL-ом, а если у подкатегории имеется, у какого либо элемента, еще свои одна опция, то она записывается во второе поле таблицы и т.д.
http://ipicture.kz/images/2014/08/lqwfo1tf82jkkurjqz5a.jpg
  •  ad_id - айди объявления
  •  kind - первая доп. опция
  •  type - вторая доп. опция
Это были основные таблицы объявлений.
3. Далее идут таблицы каторые сильно отличаются своими параметрами. Из 53 планируемых таблиц 8 из них опустились, потому что по параметрам им хватало таблицы из первого пункта ... 30 таблиц улетело в таблицу под пукнтом 2 ... а другие оставшиеся они и являются специфическими, каторые нужно создать отдельно.

В итоге получается 14 таблиц, львиную долю каторых составляют таблицы связанные с недвижемостью.
http://ipicture.kz/images/2014/08/930k33yjbnvzrgg7132d.jpg

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

Какие могу быть нюансы:
 - допустим придется какую-то категорию расширить по параметрам или добавить новую категорию, если эти подкатегории, данной категории, не привышают двух пунтов/опций, то тогда можно смело заливать в таблицу из пункта 2, если больше параметров и они отлич. от всех придыдущих таблиц, то придется создать для этой категории отдельную таблицу.

Такие вот дела ...

Добавлено через 8 минут и 13 секунд
Не сомниваюсь что придется еще не раз там исправлять детали. Это пока черновой вариант. Спасибо.

Это сообщение отредактировал(а) numerovan - 18.8.2014, 02:26
PM MAIL   Вверх
tzirechnoy
Дата 18.8.2014, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 0
Всего: 16



Цитата
И конечно же имеются таблицы (уместилось в 150 таблиц) в каторых лежат значения категорий, к примеру


Это называется "справочники".

Да, выглядит достаточно вменяемо.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2208 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.