我有两个Django模型,比如说Album
和Song
模型。
我的ForeignKey
模型有一个Song
字段,因此我可以将多首歌曲关联到Album
(多对一关系)。如果我不改变模型中的任何内容并将它们保留原样,那么如果我改变数据库存储数据的方式,那么我可以成功实现多对多的关系(相同的歌曲与不同的专辑相反,反之亦然)(normalize,非规范化等)?
由于
答案 0 :(得分:1)
不,你不能,这就是中间表和Django支持的ManyToMany relationship的原因。
事实上,考虑到你的模型如下:
class Song(models.Model):
album = FK(Album)
class Album(models.Model):
attributes ...
您有足够的代表能力为一张专辑存储多首歌。 每首歌不能 多张专辑。
将ForeignKey
放入Album
课程只会让事情变得更糟,因为每首歌曲可以有几张专辑,而每张专辑都属于一首歌! (这绝对是错的吗?)
所以你想要的是一个ManyToMany relationship,在Album
和Song
之间,如下所示:
class Song(models.Model):
attributes ...
class Album(models.Model):
songs = models.ManyToManyField(Song)
这样,每个Song
属于几个Album
,反之亦然,如您所愿。