Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];

Вниз

Как организовать данные?   Найти похожие ветки 

 
Лёша   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.007 c
15-1238574089
Игорь Шевченко
2009-04-01 12:21
2009.06.07
Как давно это было :)


2-1240384955
Лёша
2009-04-22 11:22
2009.06.07
Как организовать данные?


3-1222189438
lucky
2008-09-23 21:03
2009.06.07
Клиент к БД Oracle - с чего начать?


15-1238908559
charodey_mag
2009-04-05 09:15
2009.06.07
Ошибки Delphi при компиляции


15-1236792104
Сергей М.
2009-03-11 20:21
2009.06.07
О цифровых пиано





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский