Задачка по проектированию, ч.1

Sep 15, 2010 06:23


Не для кого надеюсь не секрет, что являюсь "активным" программистом. Опыт, конечно, не пропьешь, но часто задаюсь вопросами оптимизации тех или иных решений, хотя и существующие работают не плохо. Поэтому те, кто не сталкивался с проектированием баз данных (созданием таблиц) и ничего не программировал, могут сразу не читать этот пост дальше.

Дано ( Read more... )

проектирование, задача

Leave a comment

Comments 16

alexthunder September 15 2010, 02:40:00 UTC

dm_kalashnikov September 15 2010, 06:02:15 UTC
Вот http://img255.imageshack.us/f/62393704.jpg/

Если я правильно понял задачу.
Зачем, кстати, по два поля на каждый кейс?

Reply


dm_kalashnikov September 15 2010, 06:13:23 UTC

... )

Reply

alekbort September 16 2010, 03:07:05 UTC
Не понял систему хранения информации.
Как вы сохраните информацию о том, что повторять 16 сенбября каждого 2-го года?

Reply

dm_kalashnikov September 16 2010, 04:34:52 UTC
А ну тогда ещё одно поле "RepeatEvery" добавить и всё. Что ещё непонятно?

Reply


saminsky September 15 2010, 07:07:59 UTC
Классикой решения подобных вещей является побитное хранение и сравнение.
Для полного описания еженедельных повторений достаточно байта, а ежемесячных 32 битного слова.

Например повторение по вторникам и средам будет выглядеть как
00000110
выделение делается сравнением поля с маской.
Например маска вторника выглядит как
00000010

Тогда операция побитного "и" покажет имеет ли место событие во вторник.

В языках программирования обычно есть операция "побитного и"? судя по гуглу некоторые версии SQL в явном виде поддерживают тип BitString и операции с ним.

Для MS SQL это можно сделать, например операцией WHERE ((Поле \ Маска) mod 2) = 1,

Reply


drupals September 15 2010, 08:12:49 UTC
Я бы вместо 8 полей сделал одно, текстовое. Потом, в совокупности с REPEATER разбирал бы значение. Может быть, это бы усложнило построение SQL-запроса и снизило производительность, но избавило бы от добавления новых полей при появлении нового признака в REPEATER.

Кстати, можно сделать еще поле NOT (например, я хочу во все дни месяца, кроме 10 числа)

Reply

alekbort September 16 2010, 03:08:07 UTC
1 поле, свой синтаксис описания.
Но весомый минус - это производительность.
При больших объемах повторяемых объектов обрабатывать их очень будет сложно.

Reply

drupals September 16 2010, 06:39:08 UTC
Дело хозяйское, я не настаиваю. Не вижу никакой сложности

Reply

dm_kalashnikov September 16 2010, 04:54:22 UTC
Зачем тогда вообще нужен сиквел, давайте вернёмся к примитивным текстовым файлам.

Reply


Leave a comment

Up