В настоящее время я работаю над системой регистрации событий (в php). Он имеет две основные цели: зарегистрировать гостей онлайн до начала мероприятия и отсканировать гостей на месте со сканерами штрих-кодов. Для этой системы важно иметь онлайн-сервер и автономный сервер, не все события будут иметь доступ к Интернету.Нормализация базы данных, которая импортируется/экспортируется много
База данных будет импортирована/экспортирована с одного сервера на другой и обратно. Кроме того, одновременно будет несколько событий.
Чтобы объяснить проблему, с которой я столкнулся при разработке этой системы, предположим, что существуют два отдельных события (A и B). На онлайн-сервере гости могут зарегистрироваться для этих событий. В какой-то момент времени произойдет событие A, поэтому я должен экспортировать базу данных на автономный сервер для использования на месте. Между тем, гости все еще могут зарегистрироваться в Интернете для мероприятия B. На месте мероприятия A можно зарегистрировать также событие A, но не для события B.
После события A конец будет практически невозможно импортировать в автономный режим базы данных в онлайн, без какого-либо изменения данных. Я предположил, что у меня, вероятно, есть два варианта для схемы базы данных:
- Нормализовать полностью: есть таблица гостей со значком event_id. Все остальные таблицы, зависящие от гостей или событий, будут просто ссылаться на первичный ключ гостя и/или события.
- Раздельные столы между событиями: Есть столы для гостей A_guests и B_guests. Все остальные таблицы, зависящие от гостей или событий, также будут указаны в соответствии с событием.
Импорт и экспорт будет очень простым с выбором 2 (и без изменения данных), но количество таблиц будет расти очень быстро. Это в значительной степени дилемма: нормализовать, но испытывать трудности с импортом/экспортом. Или разделите таблицы и умножьте количество таблиц быстро.
У меня отсутствует опция, или вы считаете, что один из этих вариантов лучший выбор?
Почти. После экспорта события A гости могут зарегистрироваться онлайн только для мероприятия B. Гости могут зарегистрироваться на месте только для мероприятия A. Проблема в том, что гости на месте события A должны снова быть импортированы в онлайн-базу данных. В варианте 1 это невозможно без изменения данных в одной из баз данных. В варианте 2 это возможно, но количество таблиц будет расти очень быстро. – Thanaton
@Thanaton: Это гораздо более простая проблема. Добавьте автономную колонку Boolean в таблицу гостей. Онлайн-регистрация устанавливает логическое значение false, а автономная регистрация устанавливает логическое значение true. Когда вы вернетесь из события, вы выбираете строки из автономной базы данных с флагом Boolean true и вставляете их в онлайн-базу данных. –