有更有效的方法吗?

时间:2011-04-08 07:59:17

标签: php mysql database-design

我最近开始使用PHP和mysql数据库创建一个'游戏'。 在这个游戏中,有船只,每个玩家都可以建立和控制。

现在我在我的数据库中设置了几个这样的设置:

船舶表,包含列:
ID,名称,信用成本,矿物成本,建筑时间,描述,速度,功率,盾牌

用户表持有:
Ship_01_amount .... ship_08_amount

数字对应于船舶的编号。

我想知道是否有更有效的方法来做到这一点,而不是搞砸了。

从现在开始,如果我想添加一艘新船,我必须改变我的桌子。

6 个答案:

答案 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中的金额。

答案 1 :(得分:2)

阅读数据库规范化会有很大帮助。一个好的资源如下:http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html

虽然我知道这不是直接回答你的问题,但它将有助于解决这些未来的困境。谷歌搜索“一对多的mysql”或“多对一的mysql”将获得一些有用的资源。

亲切的问候

答案 2 :(得分:1)

搜索“多对多关系是什么”。

或查看相关问题/答案:resolve-many-to-many-relationship

正如所有其他人都回答的那样,“中间”或“中间”表是解决方案的关键。有关特定用户的特定船舶的任何信息(例如您的金额)都可以添加为该表格中的字段。无论您的游戏需要什么,您都可以添加旗帜颜色,当前速度,船长名称,首次航行日期等。

答案 3 :(得分:0)

是的,您可以通过在用户和发货User_has_ship(userId,shipId)之间创建新表映射来使用many-to-many relationship。 您可以在MYSQL中使用foreign key constraints来检查用户和船是否存在。

Altough检查用户船只现在需要一个表连接,所以你必须这样做

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

你应该更换?在userId中,您正在检查当前用户的ID。

答案 4 :(得分:0)

将此基本分为三个表格。

  • 表1:您当前的船舶表。
  • 表2:用户表(用户数据+用户ID等)。
  • 表3: Ships_User_META

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

......等等。

因此,您可以轻松地向用户添加和删除船只。

答案 5 :(得分:0)

您似乎有一个包含单一船舶描述的表格,以及一个拥有船舶参考列表的表格。你在这里有你的用户和船舶参考之间的关系。扩展这需要更改表模式。 您建议如下: 创建一个包含三列的表user_ships: - user_id字段, - ship_id字段, - 金额字段

每当您需要知道属于单个玩家的船只数量时,您可以对用户,船只和与相应ID相关联的user_ships表执行SELECT。 当用户构建新的ship模型时,在user_ships表中插入记录。 当用户丢失或构建更多船只时,请更新相应的记录。 就是这样!