Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 16, 2010 17:49:14

titan83
От:
Зарегистрирован: 2010-06-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Система учета компьютерного оборудования

Здравствуйте, уважаемые форумчане!
Очень понравилась связка питон+джанго. решил изучить поподробнее. а чтобы была и практическая польза - задумал для собственных нужд сваять систему учета компьютерной техники, заявок, задач, людей по ним и т.д. в общем, чтобы походило на итил. и питоном-то заинтересовался после пары месяцев безуспешных поисков готовой системы под себя.
сейчас нахожусь на стадии проектирования базы данных.
основное требование - максимальная гибкость. чтобы эту самую гибкость обеспечить, набросал такую систему:
элементарная единица - CI (configuration item в терминал итил) - это может быть сетевая карта, сотрудник организации, системный блок и т.д., в общем любая сущность в системе. про нее мне, в принципе, необходимо знать только название, родителя (чтобы строить иерархию логических связей) и ее текущий статус.
т.е. примерно так:
class CI(models.Model):
CI_name = models.ForeignKey('CI_names', related_name='CI_names')
CI_parent = models.ForeignKey('self', null=True, blank=True)
CI_status = models.ForeignKey('CI_statuses')
CI_type = models.ForeignKey('CI_types')
все дополнительные реквизиты планировалось дописывать в комментариях.
class CI_comments(models.Model):
CI_comment = models.TextField()
CI_comment_date = models.DateTimeField()
CI_comment_author = models.ForeignKey('CI', related_name='CI_comment_author')
CI_comment_CI = models.ForeignKey('CI', related_name='CI_comment_CI')

помимо этого очень важно кроме логических связей (главный-подчиненный) видеть и физические связи (например, сетевая карта подсоединена к 4 порту на роутере, принтер подключен к нескольким компьютерам по сети и т.д.). для этого сделал такую модель
class CI_relations(models.Model):
CI_relation_name = models.CharField(max_length=100)
CI_first = models.ForeignKey('CI', related_name='CI_first')
CI_second = models.ForeignKey('CI', related_name='CI_second')

все пока вроде бы нормально. но еще остались такие сущности, как: инциденты, проблемы и задачи. они очень похожи между собой и могли бы быть унаследованы от элементарной единицы, но тут и появляется мой главный вопрос!
если я создам отдельный модели под каждую из этих сущностей, то я потеряю гибкость на корню - я не смогу, например, связать несколько инцидентов в единую проблему, мне придется писать отдельные модели комментариев под каждую сущность и вообще станет очень костно… я же хочу увидеть своеобразную обертку на элементарной единицей, чтобы можно было получить дополнительные атрибуты (время фиксации инцидента, степень завершенности задачи и т.д.), но при этом не потерять возможность выстраивать произвольные связи, как родительские (через атрибут parent класса CI), так и горизонтальные (через модель CI_relations).
курю наследование моделей (как абстрактное, так и табличное).
но, как я понимаю, если я сделаю что-то навроде

class CI_problems(CI):
CI_problem_name = models.CharField(max_length=100)
CI_problem_date = models.DateTimeFiled()
… etc

то я получу ОТДЕЛЬНУЮ таблицу с ОТДЕЛЬНЫМ полем id, не имеющую ничего общего с таблицей CI?
если этот путь неверен, то я был бы очень признателен за указание на другую дорогу. очень уж не хочется делать убожество в стиле 2 курса кулинарного техникума…)))
Спасибо каждому, кто осилил этот крик души!)))



Офлайн

#2 Июнь 16, 2010 21:18:03

.Serj.
От:
Зарегистрирован: 2008-09-27
Сообщения: 181
Репутация: +  0  -
Профиль   Отправить e-mail  

Система учета компьютерного оборудования

А может не стоит изобретать велосипед (пусть даже в целях образования) и допилить под свои нужды http://code.google.com/p/django-inventory/ ?



Офлайн

#3 Июнь 17, 2010 14:49:58

titan83
От:
Зарегистрирован: 2010-06-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Система учета компьютерного оборудования

.Serj, спасибо! обязательно посмотрю поподробнее. интересная ссылка



Офлайн

#4 Июнь 17, 2010 18:53:19

titan83
От:
Зарегистрирован: 2010-06-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Система учета компьютерного оборудования

проникся многотабличным наследованием - то, что мне нужно.
зря только тут тему плодил))
а джанго-инвентари удрчил немного - код вообще не комментирован и все сделано традиционно и очень негибко, имхо)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version