首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预约排程器的数据库设计

预约排程器的数据库设计
EN

Stack Overflow用户
提问于 2021-02-24 14:41:54
回答 1查看 310关注 0票数 1

我想建立一个基于网络的约会安排程序。目前我正在使用Django,但我认为这是一个一般性的问题。说有老师和学生。还有一个日历,上面有一堆1小时的时隙。每个教师都可以指定哪些时间段是可用的。学生可以预约老师的时间。

在视图方面,学生可以首先选择教师,然后显示该教师的完整日历和他们的可用性,就像Calendly一样。

对于教师和学生,我觉得我可以有一个用户表,并有一个列表明用户是教师还是学生。

问题是我应该如何设计一个用于约会的表格。我目前的想法是创建一个表,其中每一行都是一个单独的时隙,其中包含开始时间和日期、教师id以及可选的学生id。如果学生id为空,则表示教师的时间段可用。

这是一个好的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-02-24 15:26:47

是的,它看起来是一个很好的设计。别忘了声明一个unique together约束来避免dups。此外,在TimeSlot上,学生应该可以为空,以允许学生加入免费的timeSlot。这就是它:

  • Teacher
    • id (pk)
    • name,主键

  • Student
    • id (pk)
    • name,主键

  • TimeSlot:唯一日期id (pk)
  • teacher_id (not null,fk到teacher)
  • student_id (null可空#!重要,fk到student)
  • date (坚果null)
  • starting_hour (坚果null)
  • Constraint starting_hour.

  • #!重要信息: teacher_id,date,not

在django上,您可以将其声明为多对多relationships with extra fields

代码语言:javascript
复制
from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name

class Teacher(models.Model):
    name = models.CharField(max_length=128)
    slots = models.ManyToManyField(Student, through='TimeSlot')

    def __str__(self):
        return self.name

class TimeSlot(models.Model):
    student = models.ForeignKey(
        Student,
        blank = True,  #!Important
        null =True,    #!Important
        on_delete=models.SET_NULL)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    date = models.DateField()
    starting_hour = models.IntegerField(max_length=64)

class Meta:
    constraints = [
        models.UniqueConstraint( #!Important
            fields=['teacher', 'date', 'starting_hour'],
            name='unique one teacher by slot')
    ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66345886

复制
相关文章

相似问题

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