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

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±

    Удобный перенос предметов с доп. ифнормацией в другой таблицей в разные инвентари

    Здравствуйте.
    Никак не могу определиться, как лучше организовать перенос предметов с доп. информацией в других таблицах в разные инвентари так, чтобы в случае удаления самого предмета в каком-либо инвентаре - удалялась вся доп. информация этого предмета, но не при перемещении.

    Например, есть инвентари (player_inventory, vehicle_inventory, house_inventory), есть предмет "Записная книга", которая хранится в таблице diary, и её записи в diary_note.

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

    2. Когда удаляют из бд аккаунт игрока, автомобиля или дома, то все предметы находящиеся в их инвентарях - удаляются, и тут мне в ручную никак не отследить, только если удаление из самого сервера. Либо же триггер (либо триггер + процедура) и делать танцы с бубнами, чтобы подчищать всё на свете (и так со всеми предметами с доп. информацией в других таблицах?)

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если честно, складывается впечатление, что ты сам себе придумываешь проблемы, с которыми потом хочешь героически бороться) Ибо непонятно зачем, например, удалять какие-либо аккаунты.

    Ну касаемо твоего вопроса - можно попытаться настроить связи между таблицами. Но, вероятнее всего, придётся вводить дополнительные столбцы с индексами и т.п. Либо удалять данные не сразу, а подчищать всё в момент запуска сервера.
    Хотя если отбросить идею удаления аккаунта, то не вижу какой-то проблемы в том, чтоб удалять данные из таблицы записных книжек отдельным запросом в момент удаления этой записной книжки из инвентаря.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Если честно, складывается впечатление, что ты сам себе придумываешь проблемы, с которыми потом хочешь героически бороться)
    Обидно как-то

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ибо непонятно зачем, например, удалять какие-либо аккаунты
    Ну, бывает так, что удаляются аккаунты, что не так-то? Или имеется ввиду реализовать пометку is_delete?
    В таком случае необходимо вручную удалять все предметы или вовсе не трогать их?

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Хотя если отбросить идею удаления аккаунта, то не вижу какой-то проблемы в том, чтоб удалять данные из таблицы записных книжек отдельным запросом в момент удаления этой записной книжки из инвентаря.
    Получается, рассматривать ситуацию, когда мы удаляем из таблицы diary какую-то книгу, то чтобы каким-то образом очищались предметы с книгой в самих инветарях не стоит, верно?



    Ну и хотелось бы уточнить, правильно я делаю, что храню сами записные книги в diary, и их индекс устанавливаю в, допустим, в extra_int в инвентаре, и по нему удаляю саму запись в diary а сама таблица удаляет записи в diary_note?

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от execution Посмотреть сообщение
    Обидно как-то
    Ну как есть :)

    Цитата Сообщение от execution Посмотреть сообщение
    Ну, бывает так, что удаляются аккаунты, что не так-то?
    Удаляются чтоб что? Какая реальная проблема этим удалением решается? И является ли удаление единственным решением этой проблемы?
    Я бы мог сейчас тут начать рассказывать про фрагментацию базы данных из-за ненужных удалений (из-за которой размер базы может только расти, а не уменьшаться), и прочие вещи, но что-то мне подсказывает, что даже на предыдущие вопросы ответов нормальных не будет, ибо лично я не могу представить ситуацию, в которой без удаления аккаунта ну совершенно нельзя было бы. А вот ситуацию, при которой удаление создаёт лишь больше проблем, чем пользы - легко (собственно, твоя ситуация такая).

    Опять же, это не значит, что теперь вообще не нужно удалять никакие данные из таблицы. Если какая-то запись не нужна и её удаление не потребует почистить ещё десяток таблиц от остаточных данных, то почему бы не удалить? А если потребует, то либо изначально нужно таблицы проектировать с учётом всех связей, либо придётся страдать. И под страданиями я подразумеваю различные реализации того, как с такими ненужными данными можно работать.

    Цитата Сообщение от execution Посмотреть сообщение
    Получается, рассматривать ситуацию, когда мы удаляем из таблицы diary какую-то книгу, то чтобы каким-то образом очищались предметы с книгой в самих инветарях не стоит, верно?
    Не очень понял. Речь про удалении книги из всей системы (чтоб её вообще нельзя было больше получить никакому игроку и чтоб у текущих игроков она удалилась) или про удаление книги из инвентаря конкретного игрока?

    Цитата Сообщение от execution Посмотреть сообщение
    Ну и хотелось бы уточнить, правильно я делаю, что храню сами записные книги в diary, и их индекс устанавливаю в, допустим, в extra_int в инвентаре, и по нему удаляю саму запись в diary а сама таблица удаляет записи в diary_note?
    Подробнее распиши что это за система у тебя и какие функции она должна иметь.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Опять же, это не значит, что теперь вообще не нужно удалять никакие данные из таблицы. Если какая-то запись не нужна и её удаление не потребует почистить ещё десяток таблиц от остаточных данных, то почему бы не удалить? А если потребует, то либо изначально нужно таблицы проектировать с учётом всех связей, либо придётся страдать. И под страданиями я подразумеваю различные реализации того, как с такими ненужными данными можно работать.
    Ну в общей сложности, раз уж об этом заговорили, не следует удалять аккаунты и стоит помечать их как удалённые, чтобы игрок мог создать, например, аккаунт с таким ником?

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Не очень понял. Речь про удалении книги из всей системы (чтоб её вообще нельзя было больше получить никакому игроку и чтоб у текущих игроков она удалилась) или про удаление книги из инвентаря конкретного игрока?
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Подробнее распиши что это за система у тебя и какие функции она должна иметь.
    На данный момент, при покупке записной книги, добавляем в таблицу diary (id, account_id).
    При создании какой-либо записи, добавляем в таблицу diary_note (id, diary_id, /*some column*/).

    Таблица diary связана с таблицей accounts (при удалении аккаунта - удаляется книжка).
    Таблица diary_note связана с таблицей diary (при удалении книжки - удаляются все записи).

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

    Теперь же реализую хранение всех предметов в инвентаре (создаю предмет отдельно ITEM_TYPE_DIARY)

    И теперь маюсь как бы лучше организовать манипуляции с этим предметом со всеми инвентарями (положить в инвентарь авто, дома и т.п.)

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от execution Посмотреть сообщение
    Ну в общей сложности, раз уж об этом заговорили, не следует удалять аккаунты и стоит помечать их как удалённые, чтобы игрок мог создать, например, аккаунт с таким ником?
    Либо помечай, либо переделывай все таблицы так, чтоб удаление данных о игроке не было сложным (что стоило сделать изначально), либо просто переименовывай, например.
    Но лучше, конечно, второй вариант (с переработкой структуры таблиц).





    Цитата Сообщение от execution Посмотреть сообщение
    На данный момент, при покупке записной книги, добавляем в таблицу diary (id, account_id).
    При создании какой-либо записи, добавляем в таблицу diary_note (id, diary_id, /*some column*/).

    Таблица diary связана с таблицей accounts (при удалении аккаунта - удаляется книжка).
    Таблица diary_note связана с таблицей diary (при удалении книжки - удаляются все записи).

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

    Теперь же реализую хранение всех предметов в инвентаре (создаю предмет отдельно ITEM_TYPE_DIARY)

    И теперь маюсь как бы лучше организовать манипуляции с этим предметом со всеми инвентарями (положить в инвентарь авто, дома и т.п.)
    Меня не то, как у тебя сейчас всё реализовано, интересует, а то, что ты хочешь сделать. Что за записи это? Какими они могут быть по длинне? Сколько их может быть? С чем/кем они связаны? Какой функционал на этих записях завязан в игре?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Меня не то, как у тебя сейчас всё реализовано, интересует, а то, что ты хочешь сделать. Что за записи это? Какими они могут быть по длинне? Сколько их может быть? С чем/кем они связаны? Какой функционал на этих записях завязан в игре?
    Я не совсем понимаю, зачем тебе данные о том, какие записи и т.п.?

    Сейчас все данные о дневнике привязаны к игроку и информация при загрузке так-же привязаны к игроку.
    Сами записи игрока я не скачиваю, напрямую через базу показываю.

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

  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Затем, чтоб придумать как нормально организовать таблицы, чтоб и работать с данными удобно было, и удалять их.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #9
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Затем, чтоб придумать как нормально организовать таблицы, чтоб и работать с данными удобно было, и удалять их.
    Что за записи это? - в дневнике, они создаются в таблице diary_note (неограниченное количество)
    С чем/кем они связаны? - дневник связан с игроком, записи с дневником, показываются прямо из бд.
    Какой функционал на этих записях завязан в игре? - создать запись, дать посмотреть игроку запись (и сам могу), удалить

    Когда игрок логинится, смотрю есть ли в таблице дневник и загружаю для игрока только информацию об дневнике

    UPD: функционал можно урезать, по необходимости
    Последний раз редактировалось execution; 13.02.2021 в 15:13.

  10. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    То бишь, там хранится текст, который игрок сам и записывает в него. И, при этом, текст привязан к предмету инвентаря?

    И что у тебя сейчас за структура таблиц? Не очень понятно зачем две таблицы и что за привязка к игроку.
    Последний раз редактировалось DeimoS; 13.02.2021 в 15:30.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

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

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

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

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

Ваши права

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