2011-04-08 3 views
1

Недавно я начал создавать «игру» с использованием PHP и DB mysql. В этой игре есть корабли, которые каждый игрок может построить и контролировать.Есть ли более эффективный подход?

Сейчас я несколько этот набор в моем дб, как это:

Ships таблицы, содержит там колонки: ID, имя, кредиты стоимость, минеральная стоимость, время здание, описание, скорость, мощность, экран

таблица пользователей имеет: Ship_01_amount .... ship_08_amount

Если номер соответствует идентификатору судна.

Мне было интересно, есть ли более эффективный способ сделать это, пока вы не вникаете в дела.

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

Заранее спасибо.

+0

В каких данных содержится таблица пользователей? –

ответ

3

Вы должны разделить информацию о пользователях и их кораблях на третий стол. Таким образом, вы имели бы следующие таблицы:

t_ships: ship_id, name, credit_cost, mineral_cost, etc 
t_users: user_id, name, etc 
t_user_ships: ship_id, user_id, amount 

Этот способ при добавлении корабля вы бы просто обновить количество в таблице t_user_ships.

+0

И было бы полезно добавить индексы на 't_user_ships.user_id',' t_users/user_id', 't_user_ships.ship_id' и' t_ships.ship_id' – SimonDowdles

1

Ищите «то, что много для многих отношений».

Или проверить соответствующий вопрос/ответ: resolve-many-to-many-relationship

Как все остальные ответили, «средний» или «промежуточный» таблица является ключом к решению. Любая информация (например, сумма, которую вы имеете) о конкретном судне конкретного пользователя может быть добавлена ​​в качестве поля в этой таблице. Вы можете добавить цвет-флагов, текущую скорость, имя капитана, дату-первый-парус и т. Д., Независимо от вашей игры.

0

Да, вы можете использовать many-to-many relationship, создав новое сопоставление таблиц между пользователями и судами User_has_ship (userId, shipId). Вы можете использовать foreign key constraints в MYSQL, чтобы проверить, есть ли у пользователя и корабль.

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

SELECT * FROM User u, User_has_ship us WHERE u.Id = us.userId and userId=? 

Вы должны заменить? в userId с идентификатором пользователя, который вы сейчас проверяете.

0

Сделайте это в основном в трех таблицах.

  • Таблица 1: Ваш текущий стол судов.
  • Таблица 2: Пользовательский стол (данные пользователя + идентификатор пользователя и т. Д.).
  • Таблица 3: Ships_User_META

    SHIP-ID | USER ID 
    --------+-------- 
        1 | 1 
        2 | 1 
        3 | 1 
        1 | 2 
    

... и так далее.

Поэтому вы можете легко добавлять и удалять суда пользователям.

0

У вас, кажется, есть таблица с описаниями судовых кораблей и таблица, на которой ссылаются на корабли как столбцы. Здесь у вас есть связь между вашим пользователем и ссылками на судно. Для этого необходимо изменить схему таблиц. Вы советуете следующее: создать таблицу user_ships с тремя столбцами: - это user_id поле, - это ship_id поле, - поле количество

Каждый раз, когда вы должны знать количество судов, принадлежащих к одному вы можете сделать SELECT для пользователей, судов и таблиц user_ships, связанных с соответствующими идентификаторами. Когда пользователь создает новую модель корабля, INSERT записывает запись в таблицу user_ships. Когда пользователь теряет или строит больше кораблей, ОБНОВЛЯЙТЕ соответствующую запись. Вот и все!

2

Это поможет многому узнать о нормализации базы данных. Хороший ресурс выглядит следующим образом: http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

Хотя я знаю, что это не отвечает на ваш вопрос напрямую, это поможет с будущими сложностями, подобными этим. Поиск Google «от одного до большого числа mysql» или «от нескольких до одного mysql» приведет к извлечению некоторого полезного ресурса.

С уважением

Смежные вопросы