簡體   English   中英

約會調度程序的數據庫設計

[英]DB design for appointment scheduler

我想構建一個基於 Web 的約會計划程序。 目前我正在使用 Django 但我認為這是一個普遍的問題。 假設有老師和學生。 還有一個帶有一堆 1 小時時間段的日歷。 每個教師都可以指定他們可用的時間段。 學生可以預訂老師的時間段。

在視圖方面,學生可以首先 select 一位老師,然后顯示該老師的完整日歷及其可用性,就像 Calendly 一樣。

對於教師和學生,我覺得我可以有一個用戶表,並有一個列指示用戶是教師還是學生。

問題是我應該如何設計約會表。 我目前的想法是創建一個表,其中每一行是一個單獨的時隙,它具有開始時間和日期、教師 ID 和可選的學生 ID。 如果學生id是null,則表示老師的時間段是可用的。

這是一個好方法嗎?

是的,它看起來是一個不錯的設計。 不要忘記聲明一個unique together約束以避免重復。 此外,在 TimeSlot 上,學生應該可以為空,以允許學生加入空閑 timeSlot。 這里是:

  • 老師
    • 身份證 (pk)
    • 姓名, ...
  • 學生
    • 身份證 (pk)
    • 姓名, ...
  • 時隙
    • 身份證 (pk)
    • Teacher_id(不是 null,發給老師)
    • student_id (可為空#!Important , fk to student)
    • 日期(螺母空)
    • 開始小時(堅果空)
    • 約束唯一一起#!重要:teacher_id,日期,starting_hour。

在 django 上,您可以將其聲明為帶有額外字段的多對多關系

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')
    ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM