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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проектирования БД, функциональный календарь 
V
    Опции темы
mexico
Дата 16.5.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Во общем пишу WEB скрипт на php для MySQL где входящими данными являются статьи (доходов / расходов).
Если обобщить что мне надо так это:
-юзвер
-календарь 365 дней
-статьи расходов|доходов

на мой взгляд с точки зрения реляционности БД нужно сделать так
T_user  (   id_user,      name,                email   ) - пользователь 
T_article(  id_article,    debit/credit,       description) - описание статьи и собственно куда ее записывать
T_day    (  id_day,        id_user,     id_article,   date,   summa)  - в такой-то день такой-то пользователь потратил такую-то сумму по статье

все отлично, только вот моя логика не дает покоя, думаю что не так? 
1пользователь * 365дней * вдень ~10 записей = 3 650 записей на одного пользователя мне кажется через чур много 
и в конце собрать эти данные  мигом,  обработать, построить графики.

1- можно ли уменьшить количество записей на пользователя хотя бы до 365-и ?

Если посмотреть глубже в задачу. 
например есть кредиты/депозиты их можно взять у пользователя в самом начале и разбить на месяца (создаем таблицу "месячного" бюджета) для того что бы обобщить статьи также в таблицу "месячного" бюджета могут входить квартплата, меньше годятся такие статьи как транспортные затраты, пища, одежда.
В итоге теряем гибкость но существенно уменьшаем количество (~3 650) записей. гибкость можно терять но что бы в конечном результате я смог обработать данные для графиков по статьям и по временной шкале месяцам.

Меня бы устроил вполне вариант 3 650 если бы это было не веб программирование где ключевую роль играет скорость т.к. объемы процессорного времени и трафика ограничены.


Это сообщение отредактировал(а) mexico - 16.5.2009, 00:30
PM MAIL   Вверх
Gluttton
Дата 16.5.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


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

Репутация: 10
Всего: 54



Если Вас смущает количество записей 3650, то прочь сомнения smile !

Я сейчас работаю над созданием достаточно простой БД, так вот, там одна из таблиц имеет объем ~6М записей.
Мне подсказали, как правильно "настроить" индексы, в результате запрос на выборку выполняется за 0,167 секунд smile .

В MySQL ведь есть индексы?


--------------------
Слава Україні!
PM MAIL   Вверх
mexico
Дата 16.5.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за комментарий.

Да конечно MySQL есть индексы smile

Для успокоения помогла статья - http://forum.vingrad.ru/forum/topic-255994.html - где 15млн записей и поиск по индексу занимает сотые доли секунд.

Но я все ровно не могу успокоится тобиш у меня по задачи к примеру есть статья "транспортные расходы" на транспорте я езжу каждый день тратя одну и туже сумму в табл. T_day  уменя 365 совершенно одинаковых записей за исключением даты что если сделать 2 поля даты 
1 поле ха-ра начало статьи "транспортные расходы"
2 поле ха-ра конец  статьи "транспортные расходы"

может следует иерархию сделать ? или это бред параноика ?
PM MAIL   Вверх
LSD
Дата 17.5.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



При наличии индекса по полям id_user, id_article, date, выборка строки из таблицы по этим же полям, будет идти быстрее, чем join двух таблиц. Так что пытаться тут сделать нормализацию - не стоит.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
mexico
Дата 18.5.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



"будет идти быстрее, чем join двух таблиц"

Объясните пожалуйста что имелось ввиду а то совсем не понятно?   smile 
PM MAIL   Вверх
LSD
Дата 19.5.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538





--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
mexico
Дата 19.5.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



LSD Спасибо конечно за ссылку но что такое join я в курсе я не понял что ты тут хотел сказать "Дата 17.5.2009, 20:04" 

Цитата
При наличии индекса по полям id_user, id_article, date,
  ну конечно индекс стоит 

Цитата
выборка строки из таблицы по этим же полям, будет идти быстрее, 
 понял!  дурак бы не понял. 

Цитата
быстрее, чем join двух таблиц.
  - вот тут имеет место недопонимание тойсть id_user конечно известен он в сессиях лежит про дату я молчу. но вот про-JOIN-ить T_article с T_day  по id_article по любому придется.  Мне показалась вы предлагаете обойтись без join Но как ???

Цитата
Так что пытаться тут сделать нормализацию - не стоит.
 если имеется ввиду нормализация UPDATE and DELETE то согласен а по другим па-рам разве не соответствует?  


ЗЫ: Вы случайно не тим лидер ? А то у меня начальник тоже опишет картинку что у него в мозгу а я потом пол дня сижу гадаю что же он имел ввиду  smile 
PM MAIL   Вверх
LSD
Дата 20.5.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Я говорил про то, что иногда денормализация таблиц может быть полезна. Например в данном случае можно добавить в таблицу T_day колонку article_description которая бы была ссылкой на соответствующее поле в T_article. Получится дублирование информации, плюс изменение имени статьи может стать длительной операцией. Но зато мы получим прирост производительности по запросам которым надо получать расходы и их статьи.



Цитата(mexico @  19.5.2009,  16:52 Найти цитируемый пост)
Вы случайно не тим лидер ?

Пока нет, но это чисто случайно smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 20.5.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(LSD @  20.5.2009,  17:02 Найти цитируемый пост)
плюс изменение имени статьи может стать длительной операцией

плюс необходимо сериализовать операции добавления/изменения дня и модификации статьи...
Самостоятельно поддерживать согласованность данных.. ох геморройная задача.

В данном случае, денормализация t_day, перенесение description врядли даст приросту для построения графика.
вот debit/credit, пожалуй следовало бы.. и fk кинуть по паре (id_article,    debit/credit) дабы запретить менять, если уже есть записи.

Уменьшить количество записей можно было бы если бы pk назначить по (id_day,  id_user,     id_article).

mexico, Какие вы отчеты желаете делать по вашим данным?

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

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



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


Новичок



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

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



Цитата

Какие вы отчеты желаете делать по вашим данным?

пока не предпалагаю нечего грандиозного.
- Отображу 2 прямые (доход/расход)  за год в разрезе по месяцам.
- доходы/расходы в процентном соотношении за год 


Zloxa - а добавление сущности "месяц" по идее будет хранить сумму затрат за месяц,
 вы подозреваете что SUM() плохо справится (ресурсоемко) с этой задачей?

просто у меня была идея сущности "месяц" но предназначение ее было бы уменьшить количество записей в T_day а не хранение вычислений.


ЗЫ: спасибо модераторам топика за коментарии smile  

Это сообщение отредактировал(а) mexico - 20.5.2009, 21:36
PM MAIL   Вверх
Zloxa
Дата 21.5.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(mexico @  20.5.2009,  21:35 Найти цитируемый пост)
 вы подозреваете что SUM() плохо справится (ресурсоемко) с этой задачей?

C озвученными Вами объемами, не затруднительно будет справиться и экселю. smile
Однако ж чтото побуждает Вас опасаться за производительность? 

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

Принцип, описанный мной я использую для хранения остатка в разрезе даты в периоде ~2 года, ~300 розничных магазинов, 1,5к номенклатуры.
Остаток по магазину на дату по транзакциям рассчитывается ~1,5 часа
Остаток по магазину на дату по предложенной структуре рачитывается ~3 мин.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

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

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

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

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

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


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

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

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

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

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


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

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


 




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


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

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