Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как оптимально хранить правила(формулы) / 4 сообщений из 4, страница 1 из 1
11.11.2004, 01:54
    #32776460
diml
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимально хранить правила(формулы)
БД для связистов.
Задача формировать и хранить, выводить на печать наборы позывных по узлам связи.
В старой (Dos-кой) задаче люди в одну табл.
Забивали строчки с правилами формирования позывных, жали кнопку рассчитать и по каждому правилу получали список позывных.
Код: plaintext
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.
Правила формирования позывных (из описания к старой задаче):
 1 ) Позывные могут изменяться с годом =>  Поле "Год" заполняется четырёхзначными цифрами.
 Если поле остается незаполненным, то считается, что данный набор позывных актуален для всех лет.

 2 ) Позывные могут изменяться ежемесячно => Поле "Месяц" заполняется как однозначными,
так и двузначными числами, соответствующими значениям месяцев, 
на которые распространяет свое действие данные правила. 
Допускается использование перечисления месяцев через запятую и описание интервалов месяцев через тире.
Например:  1 , 3 - 5 , 10 - 12 . Если поле остается незаполненным,
то считается, что данные правила распространяет свое действие на все месяцы года.

 3 ) Позывные могут изменяться ежедневно => 
Поле "День" может заполняться числами, соответствующими числам месяца. 
Допускается использование перечисления дней через запятую и описание 
интервалов дней через тире. 
Кроме этого, допускается использование следующих формул при описании дней:
Пн - по понедельникам;
Вт - по вторникам;
Ср - по средам;
Чт - по четвергам;
Пт - по пятницам;
Сб - по субботам;
Вс - по воскресеньям;
Ед - ежедневно;
Рд - по рабочим дням;
Вх - по выходным дням;
Пр - по праздничным дням;
Не - по нечетным дням;
Че - по четным дням.
Вместе с формулами, описывающими дни недели, допускается применение необязательного суффикса, 
принимающего числовые значения от  1  до  5  и символьное значение П. 
Например: Пн1 -  1 -й понедельник месяца; СрЗ -  3 -я среда месяца;
 СбП - последняя суббота месяца.Существует также формула Кр, 
исключающая формировании позывных в некоторые дни. Например: Сб,КрПр - 
по субботам, кроме праздничных дней. 
Формула Кр может применяться только после другой формулы, которая
 описывает дни формировании позывных. Среди этих дней и производит 
исключение формула Кр. Запрещается использовать формулу Кр без 
предшествующей. Возможно также использование формулы ЧзЦ - через Ц
дней.

 4 ) Позывные могут изменяться по времени но тут просто вбивается на какое 
конкретно время этот позывной 
Т.о. если например задано: год=2004, месяц=1-5, дата=Пн,Вт,Ср,Чт;Че;КрПр,
время=09:00

То должен быть рассчитан список позывных на 09:00 на понед., вторн., сред.,
четв. по четным дням кроме праздничных , с января по май на 2004 год.


Как оптимально для последующей обработки хранить правила(формулы)
формирования позывных. с годом и месяцем еще ладно (одно поле для года
NULL/значение, и два StartMonth,EndMonth для месяца), а вот как оптимально
хранить дату для последующих вычислений???

Заранее спасибо.
...
Рейтинг: 0 / 0
11.11.2004, 09:49
    #32776700
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимально хранить правила(формулы)
Проще надо быть

Одна таблица

Date1, Date2 datetime -- интервал действия (год, месяц... миллисекунда)
Пн bit, ... Вс bit, -- дни недели
Ед bit -- ежедневно;
Рд bit -- по рабочим дням;
Вх bit -- по выходным дням;
Пр bit -- по праздничным дням;
Не bit -- по нечетным дням;
Че bit -- по четным дням.
Пн1 bit, ... ПнП bit
Вт1 bit, ... ВтП bit
...
Сб1 bit, ... СбП bit
Кр... bit во всех небходимых сочетаниях с др.

ежели вылазишь за ограничение по числу столбцов => +доп. таблица.
-------------------

Вариант интеллектуальнее
Две таблицы

1. Правила-заголовки
ID int -- идентификатор правила
Name varchar(128) -- имя правила

2. Атрибуты-правила
ParID int -- идентификатор правила
Date1, Date2 datetime -- интервал действия (год, месяц... миллисекунда)
AttribID
AttribValue1
AttribValue2
...
----------------
Основная идея:
Клиент может задавать формулы как X,Y,Z... и т.п. но при записи на сервер это (X,Y,Z...) декодируется в несколько "простых" правил, соотвествующих одной строке.
...
Рейтинг: 0 / 0
12.11.2004, 10:05
    #32778883
diml
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимально хранить правила(формулы)
2 aleks2:
Спасибо за ответ.
Поясните пожалуйста вариант 2.
AttribID - сылается на справочник атрибутов?
Но зачем тогда AttribValue2, значение атриьута может быть только одно.
???
А год я думаю лучше хранить отдельно, от месяцев т.к. - правило может быть
составленно на всю жизнь и тогда в поле год будет пустое.
Месяцы тоже могут задать , а могут и нет если правило расчитано на все месяцы,
Код: plaintext
1.
2.
3.
4.
5.
например: год=NULL, месяц=NULL, дата= 1 - 5 , 15 , 20 - 30 ;КрПр,
время= 09 : 00 
То должен быть рассчитан список позывных на  09 : 00  в числах c  1  по  5 , 15  и с  20 - 30  каждого месяца 
кроме праздничных дней(берем из таблицы праздничных дней), не зависимо от года 
(т.е. просто по  12  месяцам)
...
Рейтинг: 0 / 0
13.11.2004, 11:33
    #32780836
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимально хранить правила(формулы)
diml2 aleks2:
Но зачем тогда AttribValue2, значение атриьута может быть только одно.
???
...
Код: plaintext
1.
например: год=NULL, месяц=NULL, дата= 1 - 5 , 15 , 20 - 30 ;КрПр,


Как же ты, бедняга, интервалы (дата=1-5) собираешься хранить?
Строкой? Ветер в ж...

дата=1-5
AttID = интервал
AttValue1=1
AttValue2=5

дата=15
AttID = интервал
AttValue1=15
AttValue2=15

Да и потом может чего всплыть... лучше перестраховаться.

ну с годом и месяцами, могет я и погорячился. Тут думать нада...
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как оптимально хранить правила(формулы) / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]