所以我尝试过搜索,但还没有找到如何完全掌握这一点。
我正在重新组织我的数据库,因为我将用户ID作为逗号分隔值存储在一行中,以控制权限。对我而言,这似乎是一种更好,更快(硬件)的方式,但我现在正朝着这种“正确”的方式发展。
据我所知,你需要3张桌子。这就是我所拥有的。
Table 1. members -> ID | user_name
Table 2. teams -> ID | team_name
Table 3. team_members -> ID | team_fk | member_fk
我理解如何在另一列中存储数据并使用sql数据来显示它。我很困惑的是为什么我必须将列(关系)链接到其他表的ID。我可以在不使用关系的情况下获取数据。我对它甚至做了什么感到困惑。
此外,我希望有多个值来确定每个团队的权限。我会这样做:
Table 3. team_members -> ID | team_fk | member_fk | leader_fk | captain_fk
^为领队和队长设置0或1(真或假)。
或者我会为每个权限创建一个表(例如team_leaders,team_captains)吗?
感谢您的帮助!
赖安
答案 0 :(得分:0)
似乎“领导者”,“队长和”正式成员“都是你团队中的角色。所以你可以创建表team_roles,或者只是将角色作为字符串分配给你的关系表,即
team_members -> ID | team_fk | member_fk | role
关键是要保持数据库[规范化] https://en.wikipedia.org/wiki/Database_normalization。在大多数情况下,使用规范化数据库确实更容易。
答案 1 :(得分:0)
我感到困惑的是为什么我必须将列(关系)链接到其他表的ID。我可以在不使用关系的情况下获取数据。
您没有 将列声明为外键。这只是一个好主意。它有以下用途:
team_fk
显然是对teams
表的引用。team_members
或team_fk
的{{1}}行,则会报告错误。请注意,在MySQL中,此检查仅由InnoDB引擎完成,而不是MyISAM。表3. team_members - > ID | team_fk | member_fk | leader_fk | captain_fk
如果member_fk
和leader
只是captain
值,则它们不是外键。外键列包含对另一个表中的键的引用。所以我会称这些为true/false
和is_leader
。
但是,如果一个团队可以拥有多个队长和领导者,那么您应该只将这些值放在is_captain
表中。如果只有一个,它们应该在team_members
表中:
团队 - > ID | team_name | leader_fk | captain_fk
其中teams
和leader_fk
是captain_fk
表中的ID。这样可以确保您不会无意中将members
分配给同一团队中的多个成员。