Fragmond Asked: 2017-11-28 16:06:04 +0800 CST2017-11-28 16:06:04 +0800 CST 2017-11-28 16:06:04 +0800 CST 定义 3 个表的关系 772 我有 3 个表,当前定义为: 这是最好的方法,还是我应该使用关联表? 我把关系倒过来,1个组可以包含很多用户和很多学生。除了组之外,用户和学生之间没有其他关系。这是一个跟踪程序,在该程序中,一个或多个用户正在带领一个学生或一组学生完成签到程序。 sql-server-express 1 个回答 Voted Best Answer Kent Chenery 2017-11-28T16:33:47+08:002017-11-28T16:33:47+08:00 根据您的描述,您希望有一个GroupMembers表可以为您完成所有多对多连接。 您当前的架构只允许 aGroup包含一个User和一个Student,因为您已将 GroupName 设为主键。如果组名发生变化,您确实希望将其拆分Group到自己的表中。 这可以让您拥有: 一个Group有很多Users很多Students Users可以是许多人的成员Groups Students可以是许多人的成员Group AUser不应该在 a 中重复Group AStudent不应该在 a 中重复Group 这是通过这样的模式实现的: 因为您只需要给定组、用户和学生的一种组合,所以您也可以将外键列设为主键。 这一切都遵循第三范式(至少)。
根据您的描述,您希望有一个
GroupMembers
表可以为您完成所有多对多连接。您当前的架构只允许 a
Group
包含一个User
和一个Student
,因为您已将 GroupName 设为主键。如果组名发生变化,您确实希望将其拆分Group
到自己的表中。这可以让您拥有:
Group
有很多Users
很多Students
Users
可以是许多人的成员Groups
Students
可以是许多人的成员Group
User
不应该在 a 中重复Group
Student
不应该在 a 中重复Group
这是通过这样的模式实现的:
因为您只需要给定组、用户和学生的一种组合,所以您也可以将外键列设为主键。
这一切都遵循第三范式(至少)。