Ruby on rails 必须按顺序创建的对象的模式设计,如果不相同,它们之间也密切相关

Ruby on rails 必须按顺序创建的对象的模式设计,如果不相同,它们之间也密切相关,ruby-on-rails,database,database-design,schema,Ruby On Rails,Database,Database Design,Schema,队长必须由管理员创建。创建后,队长可以通过添加成员创建其团队的其他成员。拥有一个单独的团队队长表或者仅仅在团队表中分配一个团队成员角色(队长或成员)更有意义吗?除非队长与团队成员的业务逻辑有实质性的不同,否则他们应该是同一个模型 您可以使用您提到的角色来处理差异,或者(假设您有一个他们都属于的团队模型),让队长通过单独的关联与团队相关 如下所示: class Team has_one :captain, class_name: 'TeamMember' has_many :team_me

队长必须由管理员创建。创建后,队长可以通过添加成员创建其团队的其他成员。拥有一个单独的团队队长表或者仅仅在团队表中分配一个团队成员角色(队长或成员)更有意义吗?

除非队长与团队成员的业务逻辑有实质性的不同,否则他们应该是同一个模型

您可以使用您提到的角色来处理差异,或者(假设您有一个他们都属于的
团队
模型),让队长通过单独的关联与团队相关

如下所示:

class Team
  has_one :captain, class_name: 'TeamMember'
  has_many :team_members
end

我这里的第一个问题是:当你们想到一个队长时,你们是否需要存储任何关于那个人的信息,这些信息在团队成员的上下文中是不敏感的?还有:队长是否需要大量的行为或逻辑与他们的对象模型相关联,而这与其他团队成员无关?如果这两个答案中的任何一个都是肯定的,那么从长远来看,如果你现在分离船长,你可能会得到一个更清晰的模式

例如,如果你最终需要几个栏目来存储队长最喜欢的食物和音乐,但你不关心其他队员的这些信息,那么看起来“队长”和“队员”实际上是不同的动物,如果关系密切的话

另外,您是否需要跟踪哪个队的队长是哪个队的队长?如果是这样的话,这可能会使您的模式更简单一些。如果唯一使团队队长特别的是他们是一个团队的成员,那么你可以考虑一个多对多的模式,大致类似于:

  • 团队成员(id、姓名、喜爱的颜色等)
  • 队长到队(队员id,队id)
  • 成员到团队(成员id、团队id)
  • 团队
或者更简单,如果您相信每个人都只与一个团队相关,并且您不需要跟踪队长或成员身份随时间的变化:

  • 团队成员(id、姓名、最喜欢的颜色、团队id、是队长)
  • 团队(id、姓名)
在以上两种情况中,我假设您不需要存储关于团队队长的“太多”额外信息,因此队长可以与团队成员住在一起。但是如果你发现你需要追踪更多关于队长的信息,这些信息与团队成员无关,那么把队长分成一个单独的表格可能会更漂亮、更符合犹太教义