Есть две точки зрения, которые вы могли бы рассмотреть: 1. Легко ли читать модель, она не является избыточной и соответствует ли она вашей проблеме, 2. Какие запросы вы собираетесь запустить в модели.
Вы уже подумали о первом аспекте. Что касается второго, я считаю, что некоторые из запросов, которые вы хотите выполнить:
1. перечислить активы и связать их местоположение.
2. подсчитать активы на месте
3. перейдите в иерархию местоположений и перечислите все активы в каждом местоположении
Выше предлагается создать единую модель для местоположений, которая включает здания, мусорные ведра и т. Д., И дифференцировать их по полю location_type, который может быть внешним ключом для таблицы словаря (id, name). тогда для создания иерархии вам потребуется собственная ссылка на Foreign_key для родительского местоположения.
Таким образом, у вас будет один внешний ключ для местоположения из актива, и с учетом местоположения вы можете запросить asset_set напрямую. Любая другая модель будет менее прозрачной. Любая разница может быть устранена с использованием @property
методов, например, чтобы сохранить поле, специфичное для построения, вы можете создать метод, который сначала проверяет правильность типа, а затем сохраняет значение в динамическом поле, например char_field_1
Вариант вышеизложенного. Если атрибуты для Bin
, Building
и т. Д. Слишком велики и различны для объединения в одну таблицу. Затем вы можете создать отдельные модели для каждого и иметь обнуляемое однозначное поле от местоположения до каждого. При сохранении вы можете проверить, что заполнено не более одного.