0

비 관계형 데이터베이스에서 머리를 쓰기 시작 했으므로이 전통적인 SQL/django 모델을 Google로 변환하는 데 도움이 필요합니다. App Engine 모델.데이터 모델을 비정규 화하는 방법 : django/sql -> app engine

이 예는 각 이벤트에 범주가 있고 장소에 속하며 장소에 많은 사진이 첨부 된 이벤트 목록입니다.

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() 

가 어떻게 앱 엔진 모델에 해당하는 작업을 수행합니다 :

장고에서,이 같은 데이터를 모델링 할 것인가?

답변

1

이어야 App Engine에서 작동하도록 표준화되어 있어야합니다. ForeignKey를 ReferenceProperty, CharField를 StringProperty, DatetimeField를 DateTimeProperty로 변경할 수 있습니다. 범주를 참조가 아닌 문자열로 저장하는 것이 더 효율적일 수 있지만 사용 컨텍스트에 따라 다릅니다.

쿼리 디자인을 시작할 때 역 정규화가 중요합니다. 기존 SQL과 달리 모든 테이블의 모든 행에 액세스 할 수있는 임의 (ad-hoc) 쿼리는 작성할 수 없습니다. 당신이 질의하고자하는 것은 인덱스에 의해 만족되어야합니다. 현재 테이블 스캔과 복잡한 조인에 의존하는 쿼리를 실행중인 경우 쿼리 매개 변수가 즉시 계산되는 대신 쓰기 시간에 인덱싱되는지 확인해야합니다.

예를 들어, 이벤트 제목으로 대/소문자를 구분하지 않고 검색하려면 이벤트를 작성할 때 모든 엔터티에 소문자로 된 복사본을 저장해야합니다. 쿼리 요구 사항을 추측하지 않고서는 더 구체적인 조언을 제공 할 수 없습니다.

+0

매우 감사합니다. 감사합니다. – Hoff

0

그것은 당신이 여기에서 응용 프로그램의 트리오 필요

앱 엔진에 장고를 실행하는 것이 가능 : http://www.allbuttonspressed.com/projects

  • 장고 - nonrel
  • djangoappengine을
  • djangotoolbox

또한이 모듈을 사용하면 수행하려면 직접 데이터 저장소 방법에 의해 지원되지 않는 외래 키 관계를 통해 조인

  • 장고 - dbindexer

... 당신이에 가입 할 필드를 denormalises하지만 몇 가지 제한 사항이 있습니다 - 비정규 값을 자동으로 업데이트하지 않으므로 정적 값에만 적합합니다.

장고 신호는 자동 비정규 화를위한 유용한 시작점을 제공합니다.