首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库设计:不同供应商提供的价格不同的类似产品/服务

数据库设计:不同供应商提供的价格不同的类似产品/服务
EN

Stack Overflow用户
提问于 2015-06-23 23:17:44
回答 1查看 52关注 0票数 0

我正在构建一个API,使用Django/DRF和Postgres为一个应用程序接受预订温泉,沙龙等。

我希望有大量的供应商(spas)提供类似服务的菜单,但价格不同。

代码语言:javascript
复制
Provider 1 Menu
---------------
Pedicure ($50)
Manicure ($40)
Thai Massage ($100)
Balinese Massage ($120)

Provider 2 Menu
---------------
Pedicure ($60)
Manicure ($50)
Head Massage ($120)

...

Provider 35000 Menu
---------------
Pedicure ($25)
Manicure ($25)
Balinese Massage ($90)

--我试图找出适当的模型来表示这种情况,

这就是我想出来的:

代码语言:javascript
复制
class ServiceCategory(models.Model):
    Category = models.CharField(max_length=100, blank=True)

    def __unicode__(self):
        return self.Category


class Service(models.Model):
    Category = models.ForeignKey(ServiceCategory)
    Name = models.CharField(max_length=100, blank=True)

    def __unicode__(self):
        return self.Name


class Provider(models.Model):
    Manager = models.OneToOneField(User)
    Category = models.ForeignKey(ServiceCategory)
    Name = models.CharField(max_length=100, blank=True)

    def __unicode__(self):
        return self.Name


class MenuItem(models.Model):
    Provider = models.ForeignKey(Provider)
    Service = models.ForeignKey(Service)
    Price = models.DecimalField(max_digits=9, decimal_places=2, db_index=True)

    def __unicode__(self):
        return self.Provider.Name + "-" + self.Service.Name

此结构将如何执行以提供下列类型的查询:

  1. 为任何一个供应商检索整个菜单,并提供价格。
  2. 检索提供服务类(如按摩)的所有提供者的列表(按geo筛选,按价格排序)。
  3. 检索提供指定服务的所有提供者的筛选列表(泰语按摩)

直观地说,我担心MenuItem的表在短时间内增长很快,比如1到400万行,AJAX和Mobile也会通过API访问这些数据。

,为性能建模的更好方法是什么?

可能是去规范化,PostgreSQL设置,(Mem)缓存,还是分解表?

EN

回答 1

Stack Overflow用户

发布于 2015-06-24 02:22:02

  1. 为任何一个供应商检索整个菜单,并提供价格。 my_provider = Provider.objects.get(pk=my_provider_id) item = MenuItem.objects.filter(Provier=my_provider)表示项目中的项目:打印item.Service,item.Price
  2. 检索提供服务类(如按摩)的所有提供者的列表(按geo筛选,按价格排序)。 这样的反向查找是很困难的,但是您可以像这样进行相对高效的查找: MenuItem.objects.filter(Service__ServiceCategory=my_category) providers中i的my_ids = i.Provider.pk =Providers.objects.filter(geo_filter=‘在这里执行它’).filter(pk__in=my_ids)
  3. 检索提供指定服务的所有提供者的筛选列表(泰语按摩) my_providers = i.Provider for I in MenuItem.objects.filter(Service=my_service)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31015075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档