Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.011 c
3-1222067899
Клён новичок
2008-09-22 11:18
2009.06.07
Как подставить переменную в запрос?


15-1238617804
Юрий
2009-04-02 00:30
2009.06.07
С днем рождения ! 2 апреля 2009 четверг


15-1238659736
SP
2009-04-02 12:08
2009.06.07
Route


2-1240423276
Igor2010
2009-04-22 22:01
2009.06.07
Form-ы


15-1238605370
Кто б сомневался
2009-04-01 21:02
2009.06.07
April 01: с праздником друзья!