Дизайн базы данных: упорядоченное отношение «многие ко многим» - PullRequest
3 голосов
/ 16 сентября 2010

В Django у меня есть следующие модели:

class Pink(models.Model):
    ...

class White(models.Model):
    ...
    pinks = models.ManyToManyField(Pink)
    ...



В какой-то момент мне нужно было определить порядок Pinks внутри White (чтобы иметь White1.pinks: P1, P2, P3 вместо случайного White1.pinks: P2, P3, P1) , поэтому я создал

class PinkInWhite(models.Model):
    pink = models.ForeignKey(Pink)
    white = models.ForeignKey(White)
    position = models.PositiveIntegerField("pink's position inside this white")

    class Meta:
        ordering = ['white','position']



Вопрос 1: это лучшее решение?

Вопрос 2: Это явно избыточно: у меня все еще есть поле pinks в моей модели White, потому что оно мне нужно в других ситуациях, которые не требуют упорядочения. Могу ли я сохранить его или лучше удалить его и всегда вместо этого использовать реляционную модель PinkInWhite




(Имена моделей вымышленные. Для упрощения вопроса я не использовал настоящие имена моделей, а разговоры о мистере X и мистере Y не помешали бы удобочитаемости ...)

1 Ответ

1 голос
/ 16 сентября 2010

Это зависит от того, насколько четко определено ваше предназначение.

Если вы просто ищете набор упорядоченных розовых оттенков белого цвета, вы можете просто сложить все в одну таблицу и избежать соединительной таблицы PinkInWhite.

Но если в будущем вы захотите иметь другие оттенки, кроме оттенков красного, то привязывать гвоздики к белому, как вы, слишком ограничительно.Просто оставьте белые белыми и создайте соединительную таблицу, связывающую гайки с одинаковыми белыми (с упорядочением).Тогда у вас есть возможность делать оттенки синего, желтого, чего угодно.

Но краткий ответ на ваш вопрос, что у вас будет, пригодно для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...