我正在开发一个新的网络平台,让用户,小组和那些用户可以获得成就(每个小组都有自己的成就)来完成特定任务,这些是我目前的表格:
我的问题是,在User_achievements
表中,我应该存储用户和组ID还是仅存储包含组和用户之间关系的group_user id?
答案 0 :(得分:2)
首先回答您的问题,我会将user_id作为外键存储在user_achievements表中,因为成就链接到用户而不是此表中的组。
如果成就也链接到该组,正如您在对另一个答案的评论中所提到的那样,该关系应显示在成就表中,而不是user_achievements表。
为什么Group_users表有自己唯一的id(你似乎暗示它是),它不仅仅是一种加入多对多关系的方式吗?如果是这种情况,为什么不只是将group_users表的主键设置为user_id外键和groups_id外键的组合。表格不需要唯一的ID,因为两个外键的组合本身就是唯一的。
编辑:
所以我这样做:
Users table:
id (Primary Key)
... What ever other data you want to store for the user ...
Groups:
id (Primary Key)
... What ever other data you want to store for the group ...
Group_users:
user_id (Foreign Key to users.id) (Part of primary key)
group_id (Foreign Key to groups.id) (Part of primary key)
Achievements:
id (Primary Key)
group_id (Foreign Key to groups.id)
... What ever other data you want to store for the achievement ...
User_achievements:
achievement_id (Foreign key to achievements.id) (Part of primary key)
user_id (Foreign key to users.id) (Part of Primary Key)
答案 1 :(得分:0)
我建议你在users_achievement表中使用user和group_id。的原因。
:)
答案 2 :(得分:0)
1)成就是否可能与多个用户(或user_group)相关联? 如果答案是多个用户,那么您需要一个user_achievement表。否则,您可以将用户ID放入成就表本身。
2)成就与user_group或仅与用户相关联吗? 如果回答user_group,则将用户组ID存储在user_group_achievement表中或直接存储在achivement表中(请参阅第一个问题)。否则,将用户标识存储在user_achievement表或user_group_achivement表中(同样,第一个问题)。
users
-------
user_id
user_name
groups
-------
group_id
group_name
user_groups
-----------
user_id
group_id
achievments
------------
achievement_id
achievement_name
user_achievements
-----------------
user_id
achievment_id
group_achievements
-----------------
group_id
achievement_id
因此,您在用户组,用户成就和群组成就之间存在许多关系。
你可以做联接找到: 组中的所有用户 用户的所有组 用户的所有成就 所有用户的成就 团队的所有成就 所有成就小组
需要额外加入才能找到与小组成就相关联的所有用户。