Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 27
  1. #1
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±

    Хранение данных о больших системах в базе MySQL

    Доброе время суток. Работая над системами оружия и инвентаря, столкнулся с трудностями в хранении информации и работы с ней. Для первой системы нужно порядка 20 столбцов, а для второй порядка 40. Не думаю, что разумно все 40 столбцов добавлять в одну таблицу. Подумывал об использовании типа данных SET в MySQL. Но через него получится хранить лишь именование оружия/предмета (идентификатор). А их количество - нет. Может посоветуете что-нибудь?
    Последний раз редактировалось Elrmrnt-Kritik; 02.08.2018 в 03:05.

  2. #2
    Аватар для X!X
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.06.2018
    Сообщений
    58
    Репутация:
    1 ±
    Создай отдельную таблицу inventory и оттуда просто выгружай информацию о объектах

  3. #3
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Количество предметов большое и хранить типа item1, item2, item3... не думаю, что есть правильно. Ведь наверняка есть какие-то нормальные способы. Может стоило и на форумах по MySQL спросить, но и здесь заметил ziggi, Deimos, вроде VVWVV с базами данных хорошо работают и понимают, где, что и как лучше.

  4. #4
    Аватар для X!X
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.06.2018
    Сообщений
    58
    Репутация:
    1 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Количество предметов большое и хранить типа item1, item2, item3... не думаю, что есть правильно. Ведь наверняка есть какие-то нормальные способы. Может стоило и на форумах по MySQL спросить, но и здесь заметил ziggi, Deimos, вроде VVWVV с базами данных хорошо работают и понимают, где, что и как лучше.
    создаешь просто один столбец "items" (к примеру) с ид предметов через запятую и выгружаешь с помощью sscanf через

  5. #5
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Во многих планах убогий способ. Прежде всего потому, что для обновления одного значения придется вновь форматировать весь лист.

  6. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Покажи, что ты хочешь сделать.

  7. #7
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    А что показывать-то?) Есть список предметов, идентификаторы которых объявлены в enum. Вроде такого:
    1. enum e_ITEMS
    2. {
    3. ITEM_CLOCK = 0, // часы
    4. ITEM_TIMER, // секундомер
    5. ITEM_SIMCARD, // симкарта
    6. ITEM_PHONE, // телефон
    7. ...
    8. };
    9.  
    10.  
    11. new gPlayerItem[MAX_PLAYERS][e_ITEMS];

    Соответственно, в переменной gPlayerItem[playerid][предмет] указано количество предметов. Но типов предметов достаточно много и не хотелось бы создавать под них 40 столбцов (и работать будет с ними неудобно). А метод с созданием строки, куда уже записывать все предметы по порядку, считаю убогим

  8. #8
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Немного хотелось бы дополнить.

    Была идея создать две таблицы: в одной таблице список предметов в формате "itemid | itemname ", а в другой три столбца в формате "accountid | itemid | itemcount". Таким образом, если у игрока есть предмет 1 (секундомер) в количестве 2шт. и предмет 3 (телефон) в количестве 5 штук, во второй таблице будет две записи:

    accountid itemid itemcount
    1 1 1
    1 3 5

    А первая таблица примет следующий вид:
    itemid itemname
    1 секундомер
    3 телефон

    (выделенное кирпичным цветом стоит связать). Но в данном методе я тоже вижу минус, ибо на одного игрока придется 40 записей (максимум). Тоже не совсем экономно. Но по крайней мере оперировать будет проще
    Последний раз редактировалось Elrmrnt-Kritik; 02.08.2018 в 22:58.

  9. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Немного хотелось бы дополнить.

    Была идея создать две таблицы: в одной таблице список предметов в формате "itemid | itemname ", а в другой три столбца в формате "accountid | itemid | itemcount". Таким образом, если у игрока есть предмет 1 (секундомер) в количестве 2шт. и предмет 3 (телефон) в количестве 5 штук, во второй таблице будет две записи:

    accountid itemid itemcount
    1 1 1
    1 3 5

    А первая таблица примет следующий вид:
    itemid itemname
    1 секундомер
    3 телефон

    (выделенное кирпичным цветом стоит связать). Но в данном методе я тоже вижу минус, ибо на одного игрока придется 40 записей (максимум). Тоже не совсем экономно. Но по крайней мере оперировать будет проще
    Поздравляю, ты изобрёл нормализацию :). Так и делай.

    У меня инвентарь так выглядит:

  10. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (02.08.2018)
  11. #10
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Если не секрет, а название предметов и в моде, и в базе данных хранятся? Со стороны удобства хорошо бы везде хранить, но... Экономить нужно везде, тем более в наше время

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •