2010-01-06 2 views
2

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

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

Моя первая опция: Когда пользователь регистрируется, вставлена ​​только одна запись (в таблицу «символы»). Когда пользователь пытается войти в систему, и после того, как он/она сделал это успешно, сервер попытается загрузить всю информацию от пользователя (которая является отдельной для нескольких таблиц и объединяется через mysql «LEFT JOIN»), она будет работать, хотя всю имеющуюся у него информацию и применить их к экземпляру сущности, если он запущен в NULL (что означает, что информация еще не находится в базе данных), он автоматически будет использовать значение по умолчанию. При сохранении он будет вставляться или обновляться, чтобы все значения по умолчанию, которые были сгенерированы при загрузке, будут сохранены.

Мой второй вариант: Просто введите все необходимые строки при регистрации (строки вставляются с веб-сайта после завершения регистрации).

Недостатки первой опции: бесполезные проверки, если пользователь уже вошел в систему, поскольку все таблицы будут сгенерированы после первого входа в систему.

Переназначение первой опции: если любые записи из таблиц удалены, они будут вставлять данные по умолчанию вместо того, чтобы пнуть игрока, говоря, что информация о символе повреждена/потеряна.

Недостатки второго варианта: он может растратить немного памяти, поскольку все таблицы вставляются при регистрации, а также могут быть спам-боты и люди, которым даже не удается попасть в Интернет.

К первому варианту: нам не нужно ничего проверять на сервере.

Я также отметил, что первый вариант может испортить любые поисковые системы (через admincp, если мы попытаемся найти конкретных пользователей).

+0

Не могли бы вы подробно рассказать о какой информации вы говорите? Какие данные поступают из этих других таблиц? – ErikE

ответ

7

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

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

+0

Другим преимуществом является то, что вам не нужно беспокоиться о недостатках записей в остальной части вашего кода. С первым apraach вы рискуете иметь особые случаи повсюду. –

0

Вы упомянули, что для каждого пользователя имеется несколько таблиц данных, а некоторые из них могут иметь значение по умолчанию, если в таблице не существует ни одного. Я предполагаю, что это создало что-то вроде главной таблицы «символов» с именем пользователя, паролем и электронной почтой и отдельной таблицей для чего-то вроде «любимых ярлыков вокруг сайта», и если они не указали личные предпочтения, по умолчанию используется основной список «Профиль, список игр, игры по категориям» и т. д.

Тогда вопрос возникает при регистрации, если для этого пользователя должна быть добавлена ​​явная копия избранных ярлыков по умолчанию или имеет нулевое значение default по умолчанию?

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

Другое предложение - еще раз взглянуть на вашу структуру базы данных. Вы не говорите, что ваш текущий макет таблицы установлен в камне; есть ли способ не иметь все таблицы LEFT JOIN и иметь только одну таблицу «символов»?