Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

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

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

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

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

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


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

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

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

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

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


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

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


 




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


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

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