Модель данных Django / Проблема проектирования базы данных

Я совсем новичок в проектировании баз данных и пытаюсь понять, как лучше всего спроектировать базу данных для использования в django. Для приложения по управлению проектами для работы над vfx фильмами я хочу отслеживать все версии и задачи, поставленные перед артостом. Моя проблема в том, как различать разные рабочие процессы, сохраняя одну и ту же базу данных. Обычно рабочий процесс для художественного фильма выглядит следующим образом:

Project->Sequences->Shots->Tasks->Versions.

в то время как рабочий процесс для телесериала немного отличается:

Project-> Season-> Episode-> Sequences-> Shots-> Versions

По сути, в первом случае нам не нужны сущности / модели для сезонов и эпизодов, а кадры будут содержаться непосредственно в последовательностях. Каков будет наилучший способ достижения этой модели? Должен ли я сделать 2 приложения для разных рабочих процессов и скопировать одни и те же классы в Модели каждого приложения?

заранее спасибо.

https://drive.google.com/file/d/1L3XwtvMhNM3AzotSiAE7yT495QTqBcVs/view?usp=sharing

Очевидно, что этот простой код не будет работать, поскольку Episode всегда должен быть определен:

class Project(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

class Season(models.Model):
    name = models.CharField(max_length=2)
    project_id = models.ForeignKey(Project, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Episode(models.Model):
    name= models.CharField(max_length=3)
    season_id = models.ForeignKey(Season, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Sequence(models.Model):
    name = models.CharField(max_length=3)
    episode_id = models.ForeignKey(Episode, models.CASCADE)
    project_id = models.ForeignKey(Project, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Shot(models.Model):
    name = models.CharField(max_length=3)
    project_id = models.ForeignKey(Project, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Task(models.Model):
    name= models.CharField(max_length=64)
    shot_id = models.ForeignKey(Shot, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Version(models.Model):
    number = models.CharField(max_length=3)
    task_id = models.ForeignKey(Task, on_delete= models.CASCADE)

    def __str__(self):
        return self.number
Вернуться на верх