как хранить информацию о графике работы с помощью битовой маски? - PullRequest
0 голосов
/ 18 ноября 2011

создание очень простого приложения для планирования

Я прошу пользователя сообщить мне, в какие дни он работает, и работают ли они в данный день утром, обедом или вечером

таким образом, для данного пользователя ее данные могут быть одной или всеми точками в следующей матрице

        morning    lunch    evening
mon
tue
wed
thr
fri
sat
sun 

Мне нужно быстро иметь возможность получить эту информацию, чтобы я мог предупредить пользователя, что пришло времяидти на работу.У меня будет много пользователей.

Меня не волнуют конкретные даты или время.только отдельные дни с 1 по 7 и 3 слота в течение каждого дня.Конечно, существует много возможных комбинаций.

Я думаю о том, как хранить эту информацию.И мне интересно, является ли битовая маска уместной / выполнимой / «способом пойти с чем-то вроде этого»?Как бы вы подошли к этому?

спасибо!

Ответы [ 4 ]

3 голосов
/ 18 ноября 2011

В то время как битовая маска определенно будет работать (с использованием 7 дней X 3 смены = 21 бит), мой опыт работы с этими вещами заключается в том, что они всегда нуждаются в модификации.То есть добавляется ночная смена или иные изменения.

Учитывая это, я бы предложил придать некоторую гибкость вашему приложению.Объедините идею битовой маски с таблицей, которая определяет, что представляют собой биты.Таким образом, вы можете переопределить и изменить, как вам угодно.Если вы добавляете смену, просто добавьте запись в таблицу определений и обновите маску каждого сотрудника.

1 голос
/ 18 ноября 2011

Не беспокойтесь с битовой маской.Сделайте что-нибудь простое сейчас (например, нормализованную схему БД!) И оптимизируйте производительность позже, если начнете измерять проблемы.

1 голос
/ 18 ноября 2011

Чтобы ответить на ваш второй вопрос: если у вас нет миллионов строк, битовая маска не станет огромным преимуществом производительности (вашим узким местом все равно будет сетевой ввод / вывод) и, вероятно, преждевременной оптимизации. Тем не менее, вы сможете хранить все параметры пользователя в одном 32-разрядном целом числе.

0 голосов
/ 18 ноября 2011

Если они могут выбрать только одну опцию в день, вы можете упаковать данные в 14 бит 16-битного целого.Или, если они могут выбрать несколько опций в день, вы можете упаковать его в 21 бит 32-битного целого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...