модель нормализации данных: django / sql -> движок приложения - PullRequest
0 голосов
/ 09 ноября 2011

Я только начинаю разбираться в нереляционных базах данных, поэтому я хотел бы попросить некоторой помощи в преобразовании этих традиционных моделей SQL / django в модели (ы) Google App Engine.

Пример приведен для списков событий, где каждое событие имеет категорию, относится к месту, а к месту прикреплено несколько фотографий.

В django я бы смоделировал данные следующим образом:

class Event(models.Model)
    title = models.CharField()
    start = models.DatetimeField()
    category = models.ForeignKey(Category)
    venue = models.ForeignKey(Venue)

class Category(models.Model):
    name= models.CharField()

class Venue (models.Model):
    name = models.CharField()
    address = models.CharField()

class Photo(models.Model):
    venue = models.ForeignKey(Venue)
    source = models.CharField()

Как бы я выполнил эквивалент с моделями App Engine?

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Здесь нет ничего, что должно быть отменено нормализовано для работы с App Engine. Вы можете изменить ForeignKey на ReferenceProperty, CharField на StringProperty и DatetimeField на DateTimeProperty, и все будет готово. Возможно, более эффективно хранить категорию в виде строки, а не ссылки, но это зависит от контекста использования.

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

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

0 голосов
/ 09 ноября 2011

Возможно запустить Django на App Engine

Вам нужно трио приложений отсюда: http://www.allbuttonspressed.com/projects

  • Джанго-nonrel
  • djangoappengine
  • djangotoolbox

Кроме того, этот модуль позволяет выполнять объединения по отношениям внешнего ключа, которые напрямую не поддерживаются методами хранилища данных:

  • Джанго-dbindexer

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

Сигналы Django обеспечивают удобную отправную точку для автоматической денормализации.

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