mysql - 多表数据库设计

标签 mysql database database-design database-normalization

我有一个网站,在其中显示体育运动员及其统计数据的列表。用户可以注册并创建一个由这些玩家组成的团队,我可以在其中汇总和分析团队统计数据。我想让每个用户能够从列表中“划掉”玩家(但不将其从数据库中删除),并在需要时将已划掉的玩家恢复到列表中。被划掉或未划掉的球员需要保存在数据库中,以便当用户返回站点时他们的列表被保存。

这些是我目前拥有的表格:

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.)

我很确定有更好的方法来将信息存储在团队表中,其中有一列用于用户 ID,然后有 30 列(编号为 1-30),其中存储了玩家姓名和他所在的位置在单元格中选择(采用此格式的玩家姓名/位置)。一个团队最多可包含 30 名玩家。

我想我需要一个“可用表”来存储哪些玩家被哪些用户划掉。考虑到用户可以从列表中删除最多 600 名玩家,我不确定最好的方法是什么。

任何建议将不胜感激,我对处理数据库完全陌生,而且我似乎遇到了困难。

谢谢!

最佳答案

您可能应该从球队表中删除球员数据,并为球员和球队数据设置一个联接表。

所以你最终会得到

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 的连接是唯一的,可以用作此表的键。

关于mysql - 多表数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14208411/

相关文章:

sql - view中Where子句前的select语句处理

database-design - 设计问题

sql - 添加新字段与创建单独的表

php - 升级到 PHP 7 后的 Mysql PDO automagic utf8 转换

c++ - sqlite 数据库保持锁定/不可访问

java - 如何从注册号牌中获取车主信息?

mysql - 在MySQL中使用外键从另一个表的列中选择数据

mysql - 将 EAV 数据视为 3NF 的 SQL 查询? (Drupal 6 配置文件值)

mysql - group by indexed columns + where by indexed column导致速度下降

php - 对于此类数据,最佳的数据库设计是什么