powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как оптимально хранить правила(формулы)
4 сообщений из 4, страница 1 из 1
Как оптимально хранить правила(формулы)
    #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
Как оптимально хранить правила(формулы)
    #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
Как оптимально хранить правила(формулы)
    #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
Как оптимально хранить правила(формулы)
    #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]