使用 Django 销售事件门票的网站中的数据库设计

标签 database django database-design django-models

我在一个销售事件门票的网站上工作。我有以下设计:

Database draft

以及(为发布而简化的)模型:

class Event(models.Model):
    name = models.CharField(max_lenght=20)

class Date(models.Model):
    event_start = models.DateTimeField()

    event = models.ForeignKey(Event)

class Ticket_Class(models.Model):
    name = models.CharField(max_lenght=20)
    price = models.IntegerField()

    event = models.ForeignKey(Event)
  1. 我应该如何添加 Ticket 模型?因为票是针对特定日期的事件,所以我需要将票与事件和日期之间的关系联系起来
  2. Ticket_Class 还应该有一个“最大”字段,其中存储了在特定日期该特定 Ticket_Class 可售的最大票数。例如:事件“Metallica”的 Ticket_Class“Field”和 Ticket_Class“VIP”,均在三个不同的日期举行。我如何获取特定日期 Ticket_Class 的剩余票数?也许计算在该日期与该事件对应的 Ticket 表中有多少 Ticket。

我希望我说清楚了,英语不是我的母语。有任何疑问欢迎提问

最佳答案

我认为你的设计应该是这样的:

class Event(models.Model):
    name = models.CharField(max_lenght=20)

class Date(models.Model):
    event_start = models.DateTimeField()
    event_end= models.DateTimeField()
class Ticket_Class(models.Model):
    name = models.CharField(max_lenght=20)
    price = models.IntegerField()
    type= models.CharField(max_lenght=20)

class EventTicketSell(models.Model):
    event= models.ForeignKey(Event)
    date= models.ForeignKey(Date)
    ticket= models.ForeignKey(Ticket_Class)
    max_sellable_tickets= models.IntegerField()

这种设计的原因是您可以向 EventTicketSell 类添加一个事件,然后分配日期和票以及最大可售门票。

用于添加门票/日期/事件:

event1= Event(name= "Lion King")
event1.save()
event2= Event(name= "Metallica")
event2.save()

vip_ticket= Ticket_Class(name='VIP', price= 100, type='VIP')
vip_ticket.save()

evening_show= Date(event_start='Date Object', event_end= 'Date Object') # Date Object is like datetime.datetime.now()
evening_show.save()

concert_ticket_sell= EventTicketSell(event=event1, ticket=vip_ticket, date= evening_show, max_sellable_ticket=500)
concert_ticket_sell.save()

movie_ticket_sell= EventTicketSell(event=event2, ticket=vip_ticket, date= evening_show, max_sellable_tickets=500)
movie_ticket_sell.save()

这种设计将保持对象的可重用性和修改的灵 active 。例如,如果您想更改 max_sellable_ticket,则:

movie_ticket_sell= EventTicketSell.objects.filter(event__name='Lion King', date__event_start= datetime.datetime.now(), ticket__type= 'VIP')[0]

movie_ticket_sell.max_sellable_tickets -= form.cleaned_data['ticket_sold'] #for example we get sold count from form

movie_ticket_sell.save()

关于使用 Django 销售事件门票的网站中的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25487082/

相关文章:

sql - 代表 NCAA 篮球赛的最佳模式

mysql - 数据库布局问题

php - 使用 PHP 编辑表单更新数据需要帮助

sql-server - SQL Server 中的 View 与临时表或临时变量

django - 如何在Django中上传文件并根据格式保存在不同的位置? (jpeg 和文档)

python - 使用 django 表单验证来检查元素库存

MySQL性能调优

MySQL 不使用主键删除重复项

mysql - 数据库在 mysql 工作台侧边栏中不可见

django - 使 Django 测试用例数据库对 Celery 可见