Как описано, ваша концептуальная схема включает в себя следующие предикаты:
- задача существует
- компьютер существует
- настройка существует
- программа существует
- задача выполняется на компьютере
- задание - изменить значение
- задача - установить программу
У вас также есть одно ограничение, вам нужно судить, насколько оно значимо:
- | P6 присоединиться к P7 | = 0 - нет задачи для установки программы и изменения настройки
Некоторые могут предположить, что естественным решением Django будет использование наследования модели для представления базовой модели «Задача» с двумя подклассами - «InstallTask» и «SettingTask». Вы тогда либо несете
«компьютер» в качестве атрибута базового класса или, альтернативно, другой модели «ComputerTask» или тому подобное.
Использование наследования модели даст некоторые преимущества, включая (1) получение некоторой поддержки для создания базовой задачи одновременно с созданием, скажем, ChangeTask, и (2) поощрение, но не принуждение к поддержанию ограничения .
Однако, по моему опыту, существуют концептуальные проблемы с наследованием модели, и вы можете столкнуться с неожиданным и нежелательным поведением, например, обновлением задач. В этом случае я мог бы просто поместить Задачу 1: 1 с InstallTask и 1: 1 с SettingTask. Это на самом деле более гибкий.