我最近开始使用PHP和mysql数据库创建一个'游戏'。 在这个游戏中,有船只,每个玩家都可以建立和控制。
现在我在我的数据库中设置了几个这样的设置:
船舶表,包含列:
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中的金额。
答案 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)
将此基本分为三个表格。
表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表中插入记录。 当用户丢失或构建更多船只时,请更新相应的记录。 就是这样!