SQL-таблица пользователей вышла из-под контроля. В поисках лучшего пути - PullRequest
0 голосов
/ 20 марта 2011

Я программирую и использую программное обеспечение для опросов более трех лет.Она начиналась как простая система опросов, с базовой таблицей SQL «пользователей», которую можно найти, например, в большинстве CMS.Первоначально я планировал использовать программу два или три раза, с примерно 30 пользователями для каждого опроса.

Сегодня программа выросла и используется для одного или двух опросов каждый месяц.В опросе могут участвовать сотни пользователей, что делает таблицу ужасно длинной и запутанной.

Хотя я не могу найти лучшего способа, чем классический список пользователей.Я хотел создать новую таблицу для каждого опроса, но чувствую, что это вызывает проблемы.Теперь я делаю архивирование всей базы данных SQL после завершения опроса, что на данный момент достаточно удобно, но превратится в кошмар, когда мне придется быстро найти результаты старого опроса.

Я уверен, что я не первый, кто столкнулся с этой проблемой, и был бы рад узнать, как вы ее решили.Есть ли какие-то лучшие практики для этого?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Одним из решений является ведение двух таблиц. Users and Users_History.

После завершения опроса вы можете переместить данные в users_history. Таким образом, БД, которая влияет на производительность приложения, останется в пределах контролируемого размера. Для целей анализа данные всегда будут доступны в таблице истории.

1 голос
/ 20 марта 2011

Если набор пользователей для каждого опроса отличается (один и тот же человек в двух опросах будет иметь две разные учетные записи), вы можете добавить столбец к users со ссылкой на таблицу опросов.

ALTER TABLE users ADD COLUMN survey INT NOT NULL;
ALTER TABLE users ADD FOREIGN KEY (survey) 
    REFERENCES surveys (id) 
    ON DELETE CASCADE;

Если вы хотите разрешить пользователям, не связанным с опросом, разрешить использование ссылки на опрос равным NULL и установить для внешнего ключа значение ON DELETE SET NULL.

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

...