【发布时间】:2017-06-03 06:34:39
【问题描述】:
我想用一个 Django 示例来说明我的问题的一般性质:
class Person(models.Model):
team = models.ForeignKey(Team, related_name='member', on_delete=models.CASCADE)
class Team(models.Model):
pass
这里的目标是创建一种关系,表示一个人可以与一个且只有一个团队相关联。
但是,Person 实体知道 Team 实体是否违反了 SRP,反之亦然?
我宁愿写类似
的东西class Person(models.Model):
pass
class Team(models.Model):
members = models.OneToMany(Person, related_name='team', on_delete=models.CASCADE)
因此,每当引入新的 Entity-to-Person 关系(或现有的关系消失)时,都无需更新 Person 模型。
【问题讨论】:
-
首先,这听起来像是语义;一个人是一个团队的成员。但更重要的是,您仍然需要某种方式将 team_id 存储在 Person 底层的数据库表中;如果不更改 Person 模型,您将如何做到这一点。
-
@DanielRoseman,我需要 Person 表中的 team_id 做什么,因为我可以在 Team 表中存储 member_id(唯一受限)?
-
但是每个团队都有很多个成员。如何存储许多 member_id?
-
@DanielRoseman,你是对的,我不能 :) 不过,由于问题本质上是关于 Django 语义的,所以如果按如下方式实现该功能会很棒:每当我想表达它以“SPR”方式创建第三个表——类似于
TeamToMembers——与 Person 的 OneToOne 关系和与 Team 的 ForeignKey,以及模拟标准 CRUD 操作的额外便利方法,但关于那个表。 -
我想,这个问题现在应该结束了。谢谢@DanielRoseman 的澄清。
标签: django design-patterns database-design foreign-keys foreign-key-relationship