Mysql 模式设计的问题
我正在设计一个具有以下实体的数据库:Mysql 模式设计的问题,mysql,entity-relationship,Mysql,Entity Relationship,我正在设计一个具有以下实体的数据库: Student\u detail:将id作为主键,并保留一些属性。 事件:包含有关不同事件的详细信息事件编号为主键。(大约有32个活动) 参与:是学生详细信息和事件之间的关系,两者的PK均为FKs。 Team\u with:这是一个从student\u detail表到自身的关系,它有8个participant列,一个Team\u id列,一个for\u event\u no列(FK到event\u no)。所有participant列都是指向student
Student\u detail
:将id
作为主键,并保留一些属性。事件
:包含有关不同事件的详细信息<代码>事件编号为主键。(大约有32个活动)参与
:是学生详细信息
和事件
之间的关系,两者的PK均为FKs。Team\u with
:这是一个从student\u detail
表到自身的关系,它有8个participant
列,一个Team\u id
列,一个for\u event\u no
列(FK到event\u no)。所有participant
列都是指向student\u detail.id
的FKs。
此列的一行表示特定事件的团队。
数字是8,因为所有项目的最大团队规模都是8。
事件具有不同数量的允许团队规模。
为了避免为不同的事件创建30个不同的表格,我设计了带表格的团队。
因此,查询长度正在增加。这个设计好吗?我想听听这方面的建议。一个团队的所有成员都有相同的成员资格吗?如果团队中有8个固定角色,我会同意你的设计。如果没有,我建议:
teams (team_id PK, for_event_no FK)
team_members (team_id PK/FK, student_detail_id PK/FK)
然而,强制执行8人的最大团队规模可能会更加困难。我不认为这是一个重大问题,因为你说不同的事件允许不同的团队规模,所以8的限制可以被纳入该机制,不管它是如何实现的
参加一项活动与参加该活动的团队成员有什么区别?在
事件
和学生详细信息
之间已经存在一种关系-直接在你的团队中与
,并在我的建议中传递<代码>参与\u可能是多余的,除非可以不作为团队的一部分参与。每个活动都有不同的团队规模。这些团队规模的最大值为8(有一个团队规模为8的活动,其余的都小于8)。甚至我也开始认为,中有一个参与
和团队
是多余的。那么,在参与
中,我会包括团队id(int)
和是领导者(bool)
列,并删除团队
每个事件中一个学生可以属于多个团队吗?不,但是他可以参加多种活动。你的想法听起来不错。如果您有团队(团队id PK,事件编号FK)
,则您可以从参与的中删除事件编号
,除非您想使用它对(学生详细信息id,事件编号)
实施唯一约束。