我有一个网站,其中显示了体育运动员名单及其统计数据。用户可以注册并创建这些玩家的团队,在那里我总结并分析团队统计数据。我想让每个用户都能够从列表中“删除”一个玩家(但不会将其从数据库中删除),并在需要时恢复已被划掉回列表的玩家。划掉或不划掉的玩家需要保存在数据库中,这样当用户返回站点时,他们的列表就会被保存。
这些是我目前拥有的表格:
Players Table (COLS: Name, Team, Position, Stats, etc.)
Users Table (COLS: User ID, Name, Email, etc.)
Teams Table (COlS: User ID, 1, 2, 3, etc.)
我很确定有更好的方法将信息存储在Teams Table中,其中我有一个用户ID列,然后是30列(编号为1-30),其中我存储了玩家姓名和位置在单元格中选择(以此格式播放器名称/位置)。一支球队最多可以有30名球员。
我想我需要一个“可用表”来存储哪些玩家被哪些用户划掉。考虑到用户可以从列表中删除多达600名玩家,我不确定最佳方法是什么。
任何建议都会非常感激,我对处理数据库完全不熟悉,而且我似乎已经碰壁了。
谢谢!
答案 0 :(得分:1)
您应该从团队表中删除玩家数据,并为玩家和团队数据设置连接表。
所以你最终得到了
Teams Table (Cols: ID, User ID, Team Name)
Team_Players Table (Cols: Team_ID, Player_ID, Position, Active)
然后,您可以通过在Team_Players上运行查询来确定哪些玩家在哪个团队中,并检查他们是否处于活动状态。
我没有添加ID字段,因为Team_ID和Player_ID的连接是唯一的,可以用作此表的键。
答案 1 :(得分:0)
阅读本教程。这非常有帮助:
http://www.tomjewett.com/dbdesign/dbdesign.php?page=association.php
数据库的设计取决于给定的玩家是否可以属于数据库中的多个团队。如果可以,那就是has and belongs to many
关系,你需要一个链接表,可能叫Players_Teams
(总是以alpha顺序列出表)。此表还可以包含您正在讨论的crossedOff
列。
使用像ActiveRecord或Doctrine这样的ORM(对象关系映射器)可以大大减少您需要编写的代码量,使您在代码中对这些关系的管理有些“自动”。