Как разработать дизайн, чтобы избежать дублирования столбцов в двух моделях, имеющих один и тот же ForeignKey?

У меня есть следующая модель, в которой у пользователя есть много объектов Фото и много объектов Альбомов. Однако после того, как пользователь добавил фотографию, он может выбрать ее размещение в одном альбоме (фотография не обязательно должна иметь альбом, связанный с ней). Он также может удалить фотографию из альбома или поместить ее в другой альбом.

class User(models.Model):
    id = ...

class Photo(models.Model):
    id = ...
    user = models.ForeignKey(User, ...)
    album = models.ForeignKey(Album, null=True...)

class Album(models.Model):
    id = ...
    user = models.ForeignKey(User, ...)

Как мне обойти избыточный столбец пользователя (Album.user и Photo.user), когда фотография связана с альбомом, чтобы избежать аномалий в базе данных?

Я не могу избавиться от колонки пользователя на Photo, поскольку я не смогу получить ее, если она не связана с альбомом. То же самое относится и к Album. У меня есть некоторый опыт нормализации таблиц, но я не знаю, как избежать этого без использования ограничений db.

Вернуться на верх