За последние 24 часа нас посетили 30706 программистов и 1479 роботов. Сейчас ищут 858 программистов ...

Одна или несколько таблиц.

Тема в разделе "MySQL", создана пользователем eldor, 14 авг 2015.

  1. eldor

    eldor Активный пользователь

    С нами с:
    3 май 2013
    Сообщения:
    202
    Симпатии:
    20
    Я проектирую браузерную рпг на php+mysqli. И в одной из тем на данном форуме меня натолкнули на мысль, что в игре нужно вести контроль дропа. Сейчас у меня есть таблица с названием дропа(t1), таблица для рюкзака(t2), таблица для хранилища(t3), таблица персонажа (что одето на персе)(t4) и таблица рынка (для продажи)(t5). При таком составе таблиц, если есть какой-то дроп у персонажа, то трудно отследить его передвижение, т.к. записи завязаны только на id из таблицы с названиями дропа (t1).
    Пример:
    Код (Text):
    1.  
    2.    t1                     t2      
    3. id  name              id     id_t1
    4. 1   Шляпа             1      3
    5. 2   Кольцо            
    6. 3   Кеды
    7. 4   Рукавицы
    К примеру персонажу выпадет кольцо с моба, то тогда появляется еще одна запись в t2.
    Код (Text):
    1.  
    2.    t2      
    3. id     id_t1
    4. 1      3
    5. 2      2
    Далее данное кольцо наш персонаж захотел продать и тогда кольцо удаляется из t2 и записывается в t5.
    Позже какой-то другой персонаж покупает кольцо нашего персонажа и тогда кольцо удаляется из t5 и появляется в t2 (соответственно во всех таблицах используются id персонажей).
    Я планирую объединить таблицы t2-t5 в одну (пусть будет t6).
    Тогда прошлая манипуляция с кольцом будет выглядеть примерно так:

    Код (Text):
    1.  
    2.    t1                     t6      
    3. id  name              id     id_t1   id_char    backpack    warehouse   market   char
    4. 1   Шляпа              1       3        5           0            0         0       1
    5. 2   Кольцо            
    6. 3   Кеды
    7. 4   Рукавицы
    Персонажу выпадет кольцо с моба, то тогда появляется еще одна запись в t6.


    Код (Text):
    1.  
    2.     t6      
    3. id     id_t1   id_char    backpack    warehouse   market   char
    4. 1       3        5           0            0         0       1
    5. 2       2        5           1            0         0       0
    Далее данное кольцо захотел продать и тогда все изменения проходят только в t6.
    Код (Text):
    1.  
    2.     t6      
    3. id     id_t1    backpack    warehouse   market   char
    4. 1       3          0            0         0       1
    5. 2       2          0            0         1       0
    Позже какой-то другой персонаж покупает кольцо нашего персонажа и тогда опять все изменения проходят только в t6.
    Код (Text):
    1.  
    2.     t6      
    3. id     id_t1   id_char    backpack    warehouse   market   char
    4. 1       3        5           0            0         0       1
    5. 2       2        6           1            0         0       0
    У меня возникает вопрос оставить как есть (т.е. 4 таблицы) или сделать 1 общую таблицу? Если сделаю 1 общую таблицу, то сильно ли повлияют данные изменения на скорость работы с 1 общей таблицей?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну если отличие только в состоянии то создай поле состояния и юзай одну таблицу

    бенчмарк твоё всё. как сделаешь так и будет. провафлишь индесы - будет медленно работать. создашь параноидально много индексов - будет медленно работать.
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Я бы сделал одну таблицу за место: для рюкзака, для хранилища, для что одето на персе, для продажи

    это на первый взгляд.. а так нужно видеть картину в целом, ну например что бы отслеживать путешествие вещей от игрока к игроку..
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    связь вещь-игрок не очевидна? разница только в месте. рюкзак, надето, в пуле (особый случай где владелец - система). можно по таблице на каждого игрока и на каждую вещь. не ну а чо.