
Рассказываю ситуацию. Если опустить конкретику, то будет так: при покупке услуги клиенту предлагают поучаствовать в небольшой акции (бесплатно) -- ему дается билетик с 4-значным номером, а у него берется номер телефона. По итогам недельной игры "Спортлото" из выпавших шаров составляется выигрышная 4-значная комбинация и обладатель билета с этим номером может получить небольшой подарок.
Это все лирика

Теперь как это лучше реализовать.
Клиенты обслуживаются с помощью моей проги. Есть БД, в которой хранится куча информации (клиенты, их телефоны и пр.). Теперь надо добавить возможность проведения лотерей.
Механизм проведения подобных лотерей давным-давно отработан и над ним мне не пришлось даже задуматься -- создается табличка со всеми возможными играющими комбинациями (числа от 0000 до 9999), у каждого числа есть атрибут или статус (не сыграла, сыграла, выиграла, проиграла), при генерации билета делается выборка чисел в статусе "не сыграла", берется произвольная запись выборки, после чего ее статус меняется на "сыграла". По результатам игры всем записям в статусе "сыграла" присваивается статус "проиграла" кроме той комбинации, которая выиграла. Если игр предполагается несколько, то к таблице добавляется еще поле GAME_ID, которое будет одинаково для всех комбинаций данной игры.
Сложностей две. Во-первых, акции будут проводится довольно регулярно (раз в неделю) и неограниченное время. Т.е. каждую неделю в БД будет добавляться по 10000 записей.
Назначение акции сугубо вспомогательное и рекламное и хранить в основной БД такую справочную информацию как-то неразумно.
Можно конечно после проведения игры удалять все записи в этой таблице и генерировать номера заново, но все-равно база будет раздуваться.
Пока что я пришел к тому, что для этих целей используется вспомогательная БД, в которой храниться вся информация (все сгенерированные комбинации) для всех игр. А в основную БД копируются только выигравшие комбинации (одна запись на игру).
Но может коллективный разум форума подскажет способ лучше?