django - дизайн базы данных - для нескольких таблиц требуется 1+ номер телефона - PullRequest
1 голос
/ 11 февраля 2009

Вопрос о том, как настроить отношения с базой данных (новичок, это может быть тривиально)

Следовал учебнику по Джанго (Опрос, Выборы); Понятно, что 1 опрос имеет много вариантов, поэтому многие варианты указывают на один опрос.

   class Poll(models.Model):
      question = models.CharField(max_length=200)
      ...

   class Choice(models.Model):
      poll = models.ForeignKey(Poll)
      ...         

Вопрос: У меня есть база данных с местами, персонами и т. Д. (Несколько таблиц). Подмножество моих таблиц имеет аналогичное поле. Я хочу, чтобы у места было 1+ номер телефона (ов). Я хочу, чтобы у человека было 1+ номер телефона (ов). Я могу хотеть, чтобы другие таблицы имели 1+ номер телефона (ов).

Если я следовал подходу Опрос / Выбор, то моя проблема обозначена вопросительными знаками, показанными ниже под PhoneNumber.

   class Person(models.Model):
      firstname = models.CharField(max_length=20)
      ...

   class Place(models.Model):
      description = models.CharField(max_length=200)
      ...

   class PhoneNumber(models.Model):
      ??? = models.ForeignKey(???)
      ...

Я подумал об использовании наследования, чтобы и Person, и Place наследовали из одного и того же базового класса. Но у меня могут быть и другие поля, кроме phone_number, для которых у меня похожая ситуация и которые охватывают другое подмножество таблиц. Э.Г.

               phone_number(s)     comments
               ---------------     --------
Person         yes                 no
Place          yes                 yes
Contract       no                  yes
...

Буду очень признателен за любой совет о том, как правильно спроектировать эти типы отношений. Спасибо.

Ответы [ 2 ]

1 голос
/ 11 февраля 2009

Я думаю, что вы ищете Родовые отношения . Также здесь

0 голосов
/ 11 февраля 2009

check ContenType app, в частности Generic Relations . в основном вы сохраняете как тип, так и идентификатор объекта person / place в объекте PhoneNumber.

...