Ваша реляционная схема кажется подходящей для описанного вами варианта использования.
Описанные вами ограничения ( не более 3 команд и каждая команда может иметь не более 4 человек ) на самом деле не являются ограничения БД а точнее ограничения приложения . Вам, вероятно, придется определить проверочные логи c в переопределении метода save()
.
class Team(models.Model):
def save(self, *args, **kwargs):
if self.uni.teams.count() >= 3:
raise ValidationError("This university already has its 3 teams")
super().save(*args, **kwargs)
class Person(models.Model):
def save(self, *args, **kwargs):
if self.team.persons.count() >= 4:
raise ValidationError("This team already has its 4 people")
super().save(*args, **kwargs)
Кроме того, я бы порекомендовал вам использовать Django Модель «пользователя» , которая поставляется с несколькими утилитами: управление паролями, уникальность имени пользователя, ... et c.