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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно составить базу (пример AVITO), правильно создать архитектуру таблиц 
V
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

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

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

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

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

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


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

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

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

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

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


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

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


 




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


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

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