Дизайн базы данных Django - это хорошая стратегия для переопределения значений по умолчанию - PullRequest
0 голосов
/ 12 мая 2010

У меня есть вопрос о хороших методах проектирования баз данных, и я хотел бы использовать вас, ребята, для указателей. Проект начался просто.

Привет, у нас есть куча вопросов, на которые мы хотим получить ответы для каждого проекта ( без проблем )

Который превратился в ...

Эй, у нас так много вопросов, мы можем сгруппировать их в разделы ( да, мы можем это сделать )

Который ведет в ..

Можем ли мы взвесить эти вопросы, и я не хочу, чтобы некоторые из этих вопросов были для моего проекта ( Да, но нам становится трудно )

А потом я думаю, что они захотят, чтобы каждый раздел имел свой собственный вес ..

Требования

Итак, есть требования - Для n номера проекта

  • Разрешить администратору возможность выбирать вопросы для проекта
  • Разрешить администратору повторно взвешивать или использовать веса по умолчанию для вопросов
  • Разрешить администратору заново взвешивать разделы
  • Разрешить членам команды отвечать на вопросы.

Итак, вот что я придумала. Пожалуйста, не стесняйтесь комментировать и приводить лучшие примеры

models.py

from django.db import models
from django.contrib.sites.models import Site
from django.conf import settings

class Section(models.Model):
    """
        This describes the various sections for a checklist:
    """    
    name = models.CharField(max_length=64)
    description = models.TextField()

class Question(models.Model):
    """
        This simply provides a simple way to list out the questions.
    """    
    question = models.CharField(max_length=255)
    answer_type = models.CharField(max_length=16)
    description = models.TextField()
    section = models.ForeignKey(Section)    

class ProjectQuestion(models.Model):
    """
        These are the questions relevant to the project
    """
    question = models.ForeignKey(Question)
    answer = models.CharField(max_length=255)
    required = models.BooleanField(default=True)
    weight = models.FloatField(default = XXX)

class Project(models.Model):
    """
        Here is where we want to gather our questions
    """
    questions = models.ManyToManyField(ProjectQuestion)

Срочные вопросы:

  1. Когда я начинаю проект - любые идеи о том, как «предварительно заполнить» вопросы (и в конечном итоге весов) для проекта? Это не как загрузить вопросы. Для этого у нас есть JSON. я хочу чтобы знать, как "скопировать" вопросы шаблона в проект?
  2. Есть ли общепринятый метод выполнения этот процесс, который мне не хватает? В основном идея, на которую вы ссылаетесь вопросы выходят за ваши собственные вес по умолчанию и сохранить ответ?
  3. Похоже, хороший патрон работы будут выполнены в просмотров и что много проверок нужно будет там происходить? В том, что OK

Опять же - не стесняйтесь давать мне лучшие стратегии !!

Спасибо

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Это то, что я хотел бы получить в таблицах:

Таблица вопросов (включая вес вопроса по умолчанию) Таблица проекта (определяет детали проекта) ProjectQuestions (имеет projectid и questionid, а также новое значение веса (первоначально заполняется сеткой по умолчанию, но администратор может ее изменить).

Конечно, вы можете сделать что-то похожее и с разделами. Вам нужна таблица связывания, потому что вы не хотите, чтобы изменение веса по умолчанию изменило уже завершенные проекты, и потому что вы хотите, чтобы вес изменялся в зависимости от проекта.

Что касается того, как сделать это с помощью django, то это лучше, чем то, что я никогда не разработал бы базу данных, используя ORM.

0 голосов
/ 12 мая 2010
  1. Джанго - Предоставление исходных данных
  2. Не уверен, что вы спрашиваете здесь
  3. Я бы сказал, что вполне логично иметь эту логику в представлении, поскольку она относится к тому, как данные представлены, а не к тому, как они обрабатываются или проверяются.
...