Модель данных 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