2014-11-16 2 views
0

мое приложение имеет бизнес-объект, и каждый бизнес принадлежит к одной или нескольким категориям! Как реализовать отношение в моей базе данных?Как реализовать на многих отношениях? datastore google app engine

У меня есть два варианта,

первый вариант: (хранить все категории, которые относятся к конкретному бизнесу, в бизнес-объекта.)

class business(ndb.Model): 
     name = ndb.StringProperty() 
     categories = ndb.KeyProperty(kind=category,repeated=True) 

class category(ndb.Model) 
     name = ndb.StringProperty() 

второй вариант: (в магазине все виды деятельности, относящиеся к определенной категории в субъекте категории)

class business(ndb.Model): 
      name = ndb.StringProperty() 

    class category(ndb.Model) 
      name = ndb.StringProperty() 
      businesses = ndb.KeyProperty(kind=business,repeated=True) 

какой вариант я должен использовать ?

Еще одна проблема:

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

class business(ndb.Model): 
       name = ndb.StringProperty() 
       imagesUrl = ndb.StringProperty(repeated = True) 

или создать новый объект для каждого изображения:

class image(ndb.Model): 
     businessKey = ndb.KeyProperty(repeated = True) 
     imageUrl = ndb.StringProperty() 

Я знаю, что размер сущности ограничивается одной мега! да ?

ответ

0

Решения, подобные этому, обычно зависят от ваших шаблонов использования. В вашем случае, однако, похоже, что вариант 1 является логическим выбором, поскольку существует гораздо больше бизнес-объектов, чем категории.

Например, если вам нужно знать, к каким категориям относится предприятие, когда вы извлекаете один бизнес-объект, вам нужно будет выполнить дополнительный запрос, если вы выберете вариант 2. С помощью опции 1 этот дополнительный запрос не нужен.

Еще одно соображение - это частота обновлений. Если вы перейдете с вариантом 2, вам придется обновлять свой объект категории каждый раз, когда вы добавляете новый бизнес-объект (таким образом, необходимо обновлять два объекта, что влияет на производительность и затраты). С помощью опции 1 вам нужно обновить только одну сущность.

+0

спасибо за ваш ответ, я редактирую вопрос, не могли бы вы помочь в моей второй проблеме! – david

+0

Лучшим решением является хранение изображений в облачном хранилище Google и сохранение только ключей для извлечения этих изображений из облачного хранилища. Это дешевле, быстрее, и изображения могут кэшироваться браузерами. –

+0

Да Да, но я спрашиваю, где хранить ключи? shoud Я храню его в бизнес-объекте или создаю объект для каждого изображения? – david

Смежные вопросы