Текущий архив: 2009.06.07;
Скачать: CL | DM;
ВнизКак организовать данные? Найти похожие ветки
← →
Лёша (2009-04-22 11:22) [0]Имеется парк машин. У каждой машины может быть несколько состояний логического типа. Нужно вести лог по изменению этих сотояний. Проблема в том, что типы состояний постоянно добавляются. И поэтому иметь поле в логе на каждое состояние нельзя.
При изменении состояния в логе я добавляю запись с флагом включилось оно или нет.
Вот, что получается:
Дата Машина Сотояние Включено Описание
"01.01.2009" 123 "Ремонт" 1
"02.01.2009" 123 "Ремонт" 0
"05.01.2009" 123 "Ремонт" 1
"05.01.2009" 123 "Запуск" 1
"05.01.2009" 444 "Запуск" 1
"05.01.2009" 444 "Ремонт" 1
"06.01.2009" 333 "Резервация" 1
"06.01.2009" 444 "Запуск" 0
"07.01.2009" 123 "Перемещение" 1
"11.01.2009" 123 "Ремонт" 0
Вопрос. Правильно ли я организовал лог изменений?
← →
Лёша (2009-04-22 11:25) [1]Если правильно, ответте:
Как вывести все последние состояния для всех машин?
http://delphimaster.net/view/2-1240379974/
← →
Jeer © (2009-04-22 11:27) [2]Как я понимаю, машина не может одновременно пребывать в нескольких состояниях ?
Я бы ввел два поля "Дата начала операции" и "Дата окончания операции"
Поле Включено убрать.
← →
Лёша (2009-04-22 11:29) [3]Jeer © (22.04.09 11:27) [2]
> Как я понимаю, машина не может одновременно пребывать в
> нескольких состояниях ?
В том-то и проблема, что может.
← →
Anatoly Podgoretsky © (2009-04-22 11:32) [4]> Лёша (22.04.2009 11:22:00) [0]
А как надо?
← →
Anatoly Podgoretsky © (2009-04-22 11:34) [5]> Jeer (22.04.2009 11:27:02) [2]
Если ты думаешь об этом, то достаточно одного поля Дата операции, только оно должно быть со временем.
← →
clickmaker © (2009-04-22 11:34) [6]> В том-то и проблема, что может.
таблица Car
поля CarID ...
таблица CarState
поля CarID - ссылается на Car, StateID - ссылается на справочник состояние, BeginDate, EndDate
то есть в этой таблице может быть несколько записей для одной машины
← →
Jeer © (2009-04-22 11:36) [7]Ну и ладно, это не противоречит
Предположим состояние Ремонт может включать:
- разборка
- очистка
- замена
- покраска
- сборка
- испытание
В таком случае даты начала и окончания комплексной операции Ремонт
включают в себя все промежуточные даты
Можно ввести признак "Операция завершена", либо по специальному значения даты окончания ( начало прошлого века или "нулевая" дата ) отслеживать окончание той или иной операции.
← →
Jeer © (2009-04-22 11:42) [8]
> Если ты думаешь об этом, то достаточно одного поля Дата
> операции, только оно должно быть со временем.
Я не стал уточнять формат даты - это зависит от дискретности учета.
Может им время и не надо.
С другой стороны, действительно можно обойтись одни полем "Дата:время", если считать, что поток состояний машины непрерывно фиксируется
В этом случае дата означает конец предыдущей операции и начало следующей
Разборка дата
Простой дата
Промывка дата
Очистка дата
Простой дата
Замена дата
Сборка дата
Простой дата
Перемещение дата
Но для двух полей дат и признака завершения операции легче будет с выборками, как мне кажется.
← →
Anatoly Podgoretsky © (2009-04-22 11:46) [9]> Jeer (22.04.2009 11:42:08) [8]
С другой стороны неясно как нужно, автор не желает пока раскрывать этой тайны.
← →
Jeer © (2009-04-22 11:47) [10]Да, похоже он пока в творческих муках.
← →
Sergey13 © (2009-04-22 11:58) [11]> [0] Лёша (22.04.09 11:22)
> Нужно вести лог по изменению этих сотояний.
Мне кажется слово "ЛОГ" тут ен совсем уместно. Лог это нечто автоматическое и паралельное.
Тут же я так думаю надо говорить о "Журнале обслуживания оборудования" или что-то в этом роде. Наверное выписываются какие то документы на ремонт, соблюдаются какие то графики этого ремонта, работу наконец выполнят конкретные исполнители у кторых есть свой график работы и т.д.и т.п.
Если я прав, то екселевским подходом тут не обойдешься.
Помнится давным давно делал нечто подобное - там куча подводных камней.
← →
Jeer © (2009-04-22 12:06) [12]
> там куча подводных камней.
Ага, потом еще появится календарное планирование, оптимизация, премии и наказания, etc..
← →
Лёша (2009-04-22 12:22) [13]Jeer © (22.04.09 11:42) [8]
> дата означает конец предыдущей операции и
> начало следующей
Нет не так.
Машина переходит в сотояние "Ремонт" отметкой в журнале:
Дата Машина "Ремонт" Включено.
Машина выходит из сотояния "Ремонт" только отметкой в журнале:
ДатаБольше Машина "Ремонт" Выключено.
Паралельно с этим у этой машины меняются другие состояния, которые на "Ремонт" никак не влияют.
Таблица (лог, журнал) меня почти устраивают. Я могу узнать, как менялись сотояния у одной машины. Я могу узнать ее состояния на конкретную дату.
Я могу видеть все автоматы, которые, например "Перемещаются".
Но я не могу написать запрос, который выводит все текущие состояния (те, которые включены) всех машин.
← →
Sergey13 © (2009-04-22 12:28) [14]> [12] Jeer © (22.04.09 12:06)
Примерно так. 8-)
У меня это помнится называлось АРМ "План-график планово-предупредительного ремонта" и планы были примерно такими как ты написал.
Но как это часто бывает, все сошло на нет, когда выяснилось, что туда надо постоянно что-то оперативно вводить, не считая здоровенной справочной информации. Главный механик оказывается мечтал о волшебных электронных шахматке, карандаше и ластике, которые по щучьему велению нарисуют ему все сами.
← →
Лёша (2009-04-22 13:11) [15]clickmaker © (22.04.09 11:34) [6]
> таблица Car
> поля CarID ...
> таблица CarState
> поля CarID - ссылается на Car, StateID - ссылается на справочник
> состояние, BeginDate, EndDate
> то есть в этой таблице может быть несколько записей для
> одной машины
У меня в журнале имеются еще поля: CurrentUser, CurrentTime, Description.
Если делать "Двойную" дату, прийдется и дублировать остальные поля. Еще немного усложняется процедура добавления/снятия сотояний.
Но это не страшно. Дело в том, что запрос к такой таблице, который мне нужен (Лёша (22.04.09 11:25) [1] ). Имхо, не сильно упрощается.
← →
clickmaker © (2009-04-22 13:27) [16]> Если делать "Двойную" дату, прийдется и дублировать остальные
> поля
зачем?
таблица такого вида
CarID, StateID, CurrentUser, CurrentTime, Description, BeginDate, EndDate
машина вошла в состояние - установили BeginDate
вышла - EndDate
← →
Лёша (2009-04-22 13:31) [17]Один пользователь ставит сотояние с описанием, снимать сотояние может другой пользователь со своим описанием. Оба они должны быть отмечены в журнале.
← →
clickmaker © (2009-04-22 13:37) [18]> [17] Лёша (22.04.09 13:31)
ну так тогда
OperationID (identity), InitialOperationID, CarID, StateID, CurrentUser, CurrentTime, Description
машина вошла - InitialOperationID NULL
вышла - InitialOperationID = OperationID операции "входа"
← →
Jeer © (2009-04-22 15:24) [19]
> Лёша (22.04.09 13:31) [17]
>
> Один пользователь ставит сотояние с описанием, снимать сотояние
> может другой пользователь со своим описанием. Оба они должны
> быть отмечены в журнале.
>
Или Вы не программист ( по статусу ) - тогда наймите специалиста.
Либо Вы только учитесь - тогда вслушивайтесь в рекомендации.
В общем, успеха !
Попытки создания запросов без предварительно тщательно спланированной технологии учета и спроектированной надлежащей архитектуры БД могут стать причиной Вашего увольнения без выходного пособия :)
Страницы: 1 вся ветка
Текущий архив: 2009.06.07;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.005 c