|
|
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Прошу помощи в построении связей между табличками БД "Обслуживание оргтехники" (postgresql). В БД лежит информация об оборудовании (принтер, сканер, МФУ и т.п.), деталях подлежащих замене на обслуживании, кол-ве отпечатаных страниц (интервал - через который проводится обслуживание), условиях использования именно этого интервала для оборудования. На бумаге это выглядит так: Оборудование Деталь Условие Интервал Принтер 1 Магнитный вал 30000 стр.Принтер 1 Узел термозакрепления до 2007 г.в. 80000 стр.Принтер 1 Узел термозакрепления 120000 стр.Принтер 1 Ролики лотка подачи бумаги 250000 стр.Принтер 1 Ролики лотка подачи бумаги более 60000 стр./мес. 180000 стр.Принтер 2 Магнитный вал 30000 стр.Принтер 2 Узел сканирования 1000000 стр.Принтер 2 Узел сканирования до 2007 г.в. и более 70000 стр./мес. 800000 стр.Принтер 2 Узел термозакрепления до 2007 г.в. 80000 стр.Принтер 2 Узел термозакрепления с 2008 г.в. 100000 стр.Принтер 2 Фотобарабан 70000 стр. Т.е. для Принтера 1 магнитный вал меняется каждые 30000 отпечатанных страниц, если никаких доп. условий нет, а узел термозакрепления каждые 80000 стр., если принтер выпущен до или в 2007 году. Задача вывести список деталей подлежащих замене для заданного оборудования и его текущего значения счетчика отпечатанных/отсканированных страниц учитывая все условия, если они есть. Причем, для разного оборудования связка деталь-условие-интервал (и вариации) может повторяться, также может быть сразу два условия. Таблицы: Оборудование (id, название, парметр 1, параметр 2, ..., параметр n) - т.е. все что известно об еденице оборудования. Детали (id, название детали) Интервалы (id, значение интервала) Таблиц(ы) условий пока нет, т.к. я не знаю как их правильно реализовать (в одной таблице или в нескольких, и как связать). Всего уникальных по смыслу условий 8, которые могут содержать множество различных значений (например, год выпуска - до 2006/от 2008/до 2004/от 2010 и т.п.; условия эксплуатации - стандартные/тяжелые; кол-во страниц в месяц - больше значения/равно значению/меньше значения). На ум приходит только одно рабочее решение - для каждого условия отдельная таблица с вариантами: Условие 1 (id, значение), Условие 2 (id, значение), ..., Условие n (id, значение). id оборудования, деталей, условий и интервалов свести в одну таблицу как внешние ключи, но тогда в запросе придется проверять все условия для каждой еденицы оборудования, даже если их нет. Также в будущем может выйти новое оборудование - новые условия при проведении обслуживания. Уже несколько дней думаю как реализовать фильтрацию, чтобы проверялся только нужный фильтр, а не все подряд. Может быть профи подскажут что-нибудь дельное? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 19:10 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepot Интервалы (id, значение интервала)Вот эту то табличку и нужно поженить с условиями. Правда интервал честнее назвать максимум_отпечатанных_страниц. А год выпуска заменить на пару с_даты по_дату. Добавьте флажок условия_эксплуатации (или ссылку на справочник если их больше двух) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 19:55 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepot , предложу такой вариант... Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. Смотреть тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:02 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Картинкой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:04 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
> Оборудование (id, название, парметр 1, параметр 2, ..., параметр n) > Детали (id, название детали) Осталось сделать пару шагов. Смотрите: процесс - печать (способ печати, единица учёта результата процесса), узел - участие в процессе - ресурс (в единицах учета результата). Ну, и сами узлы и оборудование нормальным образом опишите. Оборудование, кстати, может совмещать возможность выполнения нескольких задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:32 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepot, Все это замечательно. Но лучше б вы прикрепили бекапчик БД со схемой. Просто так более визуально понятно и можно на лету помочь. Там по сути минут 15 работы. Скрипты я думаю вы и сами напишете по готовой БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:53 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Повторюсь, для разного оборудования связка деталь-условие-интервал (и вариации) может как повторяться, так и различаться, также может быть сразу два условия. Это значит, что одна и таже деталь может устанавливаться на разное оборудование и на разном оборудовании отхаживать как одинаковое, так и разное время (кол-во страниц) в зависимости от условий, так и без них, которые также могут совпадать для разных устройств и деталей. SERG1257Правда интервал честнее назвать максимум_отпечатанных_страниц Пусть будет максимум, НО т.к. одна и таже запчасть на разных принтерах ходит разное время (кол-во страниц), соответственно этот максимум разный и больше зависит от оборудования, деталь лишь устанавливается в него. SERG1257Интервалы (id, значение интервала). Вот эту то табличку и нужно поженить с условиями. Т.о. получается много табличек с условиями связанных отношениями М:М с таблицей интервалов(максимумов). И если все это сводить в одну таблицу, то опять придется создавать столько столбцов сколько таблицек с условиями и проверять их все. Я правильно понимаю? krvsaпредложу такой вариант... Задача не отследить сколько отходил конкретный расходник, а узнать чего нужно поменять на заданном значении счетчика у конкретного аппарата такого-то года выпуска учитывая ВСЕ условия. Т.е. пользователь задает модель аппарата (его id), год выпуска и текущее значение счетчика. Соответственно мы не знаем ни дату покупки, ни дату установки предыдущего расходника и в бд этого не храним. guest_20040621 Не совсем понял, что вы написали. Скорее совсем не понял:) Злой БобрНо лучше б вы прикрепили бекапчик БД со схемой Я вас понимаю, но я только разрабатываю структуру, данные же есть только в csv. Постараюсь ответить как можно более подробно на любые вопросы. Посмотрите (рисунок), как красиво получается без фильтров. Вся загвоздка в них. Если добавить один столбец фильтр, то как бд узнает чего проверять, т.к. они по смыслу разные, ежели несколько, то проверять придется все. p.s.: Спасибо всем за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 23:42 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepot Пусть будет максимум, НО т.к. одна и таже запчасть на разных принтерах ходит разное время (кол-во страниц), соответственно этот максимум разный и больше зависит от оборудования, деталь лишь устанавливается в него.Значит добавьте id оборудования. JamDepot придется создавать столько столбцов сколько таблицек с условиями и проверять их все. Я правильно понимаю?Да. Пока у меня получается Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Причем если например device_id несущественный, то бишь одинаковый для любого принтера то ставите его нулл Вы запрашиваете данную табличку на основании известных вам данных и получаете одну или больше строк из которых выбираете минимум. Если у вас вообще нет строк, значит тому, кто ведет ее надо настучать по голове. JamDepot Также в будущем может выйти новое оборудование - новые условия при проведении обслуживания. Выйдет новое оборудование придется дописывать клиентскую часть, а заодно и добавите столбцов в серверную. В любом случае этот вариант наипростейший (быстро, дешево и сердито) наиболее годится для разработки первой итерации. Отработайте на нем свои запросы, затем начинайте его (вариант) модифицировать (вышло новое оборудование - что я буду делать?, пришли новые данные по оборудованию от производителя - как я буду их менять и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 00:10 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepot Посмотрите (рисунок), как красиво получается без фильтров. Невижу я красоты. Таблицы неправильно составлены. Если завтра выберу время то нарисую вам схему - сами все поймете. Необижайтесь. Но опыт приходит с практикой. Со временем может и вы научитесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 00:13 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepotЗадача не отследить сколько отходил конкретный расходник, а узнать чего нужно поменять на заданном значении счетчика у конкретного аппарата такого-то года выпуска учитывая ВСЕ условия. А по моей схемке этого сделать нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 08:26 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
krvsaА по моей схемке этого сделать нельзя? Если дан id оборудования и текущее значение его счетчика, и если в таблице деталь под разными id находятся одинаковые детали (название), но разными максимума, то мы можем: Код: sql 1. 2. 3. 4. 5. 6. и узнаем таки, что надо менять, но это получается, то что я изобразил на своем рисунке без условий. Чего я не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 10:53 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
krvsaJamDepotЗадача не отследить сколько отходил конкретный расходник, а узнать чего нужно поменять на заданном значении счетчика у конкретного аппарата такого-то года выпуска учитывая ВСЕ условия. А по моей схемке этого сделать нельзя? Как Вы, например, планируете отразить, что для узлов термозакрепления до 2007 года лимит страниц один, а после - другой? ТС-у - вот тут обсуждалась реализация произвольных условий в базе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 10:56 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинКак Вы, например, планируете отразить, что для узлов термозакрепления до 2007 года лимит страниц один, а после - другой? У них будет отдельная запись "термозакрепления до 2007" в табличе "Деталь"... Если нужно выделять "термозакрепления" как отдельную группу - создать еще одну таблицу и связать ее с табличкой "Деталь". Названиря таблиц очень условные разумеется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:36 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepotЧего я не понимаю? Этого я не знаю... Но пока на все вопросы автора можно получить ответ по моей схемке... Ее можно еще больше "затипизировать" добавив еще таблиц/справочников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:39 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Злой БобрЕсли завтра выберу время то нарисую вам схему - сами все поймете. Ждем Бобра... Может он и не такой уш и Злой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:40 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
krvsaКот МатроскинКак Вы, например, планируете отразить, что для узлов термозакрепления до 2007 года лимит страниц один, а после - другой? У них будет отдельная запись "термозакрепления до 2007" в табличе "Деталь"... Ой. Будет 2 записи, "термозакрепления" и "термозакрепления до 2007"? А когда добавят условие "для термозакреплений с 2007 до 2009 года норма такая-то" - как Вы будете разбираться, какие из Ваших "термозакреплений" являются "термозакреплениями до 2009"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:46 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
SERG1257Причем если например device_id несущественный, ... то ставите его нулл id оборудования (device_id) существенный, т.к. в табличке оборудование может быть два одинаковых устройства (название/модель) только при условии разного периода производства. Дело в том что еденица оборудования - это не тот принтер (мфу) за которым мы следим, чистим и т.п., а модификация модели с которой мы соотносим свое устройство и хотим узнать справочную информацию о деталях для обслуживания. Интервал производства оборудования не может быть выходить за рамки производства родительской модели (см. картинку). Все условия относятся именно к оборудованию, а не к детали, т.е. как оно использует данную запчасть имея определенные ттх или в определенных условиях. SERG1257Вы запрашиваете данную табличку на основании известных вам данных и получаете одну или больше строк из которых выбираете минимум Правильно, только нужно не минимум, а конкретная связка оборудование-деталь-интервал соответствующее условиям, если они есть. SERG1257В любом случае этот вариант наипростейший Вы правы, но меня смущает проверка всех условий для всех едениц оборудования. Пытаюсь придумать что-то типа: если нет условия для связки оборудование-деталь, то используем этот интервал, если есть, то если тип условия такой-то, то проверяем такие-то столбцы и если удовлетворяет, то такой-то интервал. Кот Матроскин Как Вы, например, планируете отразить, что для узлов термозакрепления до 2007 года лимит страниц один, а после - другой? Не для узлов термозакрепления, а для оборудования вышедшего до 2007 г., т.е. оборудование до 2007 г.в. использует данный узел более агрессивно, а после вышла новая модификация, которая тот же самый узел использует более бережно, как-то так. А вот это и есть условия, которые пока не получается прикрутить, чтобы получить только одну строку для оборудования-деталь-условие(если есть)-интервал. krvsa Но пока на все вопросы автора можно получить ответ по моей схемке... Нельзя, т.к. Кот Матроскин Будет 2 записи, "термозакрепления" и "термозакрепления до 2007 а для текущего счетчика может быть только одна строка оборудование-деталь-условие(если есть)-интервал Злой Бобр Невижу я красоты. Таблицы неправильно составлены. Почему, ведь составной первичный ключ точно отражает, то что нужно, только без условий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 12:44 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Картинка к предыдущему посту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 12:45 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинБудет 2 записи, "термозакрепления" и "термозакрепления до 2007"? Да. Кот МатроскинА когда добавят условие "для термозакреплений с 2007 до 2009 года норма такая-то" Будет третья "термозакрепления с 2007 до 2009 года" Кот Матроскинкак Вы будете разбираться, какие из Ваших "термозакреплений" являются "термозакреплениями до 2009"? Так по ссылка и разберусь... Название кодтермозакрепления1термозакрепления до 20072 термозакрепления с 2007 до 2009 года3 У каких "Составляющих" будет код 2 - это они и есть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 13:11 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинкак Вы будете разбираться, какие из Ваших "термозакреплений" являются "термозакреплениями до 2009"? Не так прочитал сначала... Покажу какие "термозакрепленя" у меня есть - пустть выберут какие именно интересуют, те и покажу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 13:14 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Не, так не пойдет, юзер ничего не знает об оборудовании кроме модификации, счетчика и г.в. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 13:21 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
krvsaПокажу какие "термозакрепленя" у меня есть - пустть выберут какие именно интересуют, те и покажу... Что значит "интересуют"? Вот у Вас в базе, скажем, 5k единиц разного оборудования и 20к различных деталей, из которых 1k - термозакрепления. Предположим, что эти 1K худо бедно разделены на "просто термозакрепления" и "термозакрепления до 2007". (ТС уже уточнил, что на самом деле "до 2007 года" - это характеристика оборудования, а не детали, что заведомо ставит на Вашей схеме крест. Но пусть даже будем рассматривать ситуацию, когда это характеричтика детали) Вот Вам говорят "внеси новое правило про износ термозакреплений выпуска с 2007 по 2009 и с его учетом выдай список, какие детали надо менять". И что Вы сделаете? Выдадите все "просто термозакрепления" с просьбой "дорогой пользователь, определи (как? отправляясь на склад и лазая в каждое изделие?) по каждой детали, выпущена ли она до 2009 года, обнови информацию об оборудовании на основании этого, и тогда наша система что-то может посчитать"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 13:31 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинчто заведомо ставит на Вашей схеме крест Крест, так крест... Нет смысла придумывать самому себе какие-то не понятные проблемы. Покажи свою схему - я полюбуюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 13:37 |
|
||
|
Прошу помощь в реализации системы фильтрации данных
|
|||
|---|---|---|---|
|
#18+
JamDepotНе, так не пойдет, юзер ничего не знает об оборудовании кроме модификации, счетчика и г.в. В моем варинтре тостаточно ввести показания счетчиков для всех штук оборудования. После этой информации можно будет показать что уже пора менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 13:39 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38463293&tid=1541068]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 349ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...