CMDB服务器管理系统【s5day91】:数据库表结构补充
1、表机构补充图
2、用户信息表(UserProfile)
1、解决了什么问题
1、这台服务器是谁管理的?
2、真正出问题了我敢上去改代码了?不能
3、所以一台机器必须有运维人员和业务负责人,但是业务负责人不登陆这个系统,
4、要想登陆这个系统必须要用用户名密码,但是我这里只有部分人登录,应该怎么写
2、代码
class UserProfile(models.Model): """ 用户信息,运维管理员和业务负责人 50人 """ name = models.CharField('姓名', max_length=32) email = models.EmailField('邮箱') phone = models.CharField('座机', max_length=32) mobile = models.CharField('手机', max_length=32) class Meta: verbose_name_plural = "用户表" def __str__(self): return self.name
3、管理用户登录表(Admininfo)
1、解决了什么问题
1、有些用户可以登录有些不可以,所以要做一个表关联
2、一个人只能有一个用户名和密码
3、能登录在这AdminInfo这张表,不能登录的在UserProfile表里
2、代码
class AdminInfo(models.Model): """ 用户登录: 10 """ user = models.OneToOneField("UserProfile") username = models.CharField('用户名', max_length=32) password = models.CharField('密码', max_length=32)
4、服务器表
1、解决了什么问题
1、这个机器在那个机房?
2、属于哪个部门,所以我们要创建一个表,包含机房和部门
3、刚买回来的服务器没有部门,部门就是运维部,
4、部门和服务器是什么关系?
5、在小公司可能会出现服务器和业务线应该是多对多,但是有正规的有运维工程师的或者做运维自动化的公司,
一定保证一个服务器只属于一个业务线
6、必须要用就写个多对多的话
你说这台服务器要不要有管理员?要不要有业务负责人?业务线的负责人
2、代码
class Server(models.Model): """ 服务器信息 """ # asset = models.OneToOneField('Asset') idc = models.ForeignKey(IDC,null=True, blank=True) cabinet_num = models.CharField('机柜号', max_length=30, null=True, blank=True) cabinet_order = models.CharField('机柜中序号', max_length=30, null=True, blank=True) business_unit = models.ForeignKey(BusinessUnit,null=True, blank=True) tags = models.ManyToManyField(Tag)
5、业务线表(BusinessUnit)
1、解决了什么问题:
1、在公司的运维的力度不是管这台机器,他管这个部门
2、一个人管100台机器,一个运维负责一个或多个部门
3、所以管理员没有必要给它写在这,他和业务线关联,业务线又和服务器关联
2、代码
class BusinessUnit(models.Model): """ 业务线(部门) """ name = models.CharField('业务线', max_length=64, unique=True) # 销售,1,2 """ 如果反向查找,就有两个ForeignKey,这种情况一定要加related_name """ contact = models.ForeignKey(UserGroup,related_name='c') # 业务线联系人:1 manager = models.ForeignKey(UserGroup,related_name='m') # 运维管理人员:2 class Meta: verbose_name_plural = "业务线表" def __str__(self): return self.name
6、用户组表
1、待解决问题:
1、如果业务线联系人和运维管理人员联系不上怎么办?
2、所以我们就设置2个,也就是备胎,所以我设置比较灵活我可以是一个也可以是两个
3、所以我再建一张表,直接不再和UserProfile关联而是和UserGroup关联
4、这样我们一个人一个组,也可以多个组一个组
2、代码
class UserGroup(models.Model): """ 用户组 ID 名称 1 组A 2 组B 3 组C 用户组和用户关系表 组ID 用户ID 1 1 1 2 2 2 2 3 3 4 """ name = models.CharField(max_length=32, unique=True) users = models.ManyToManyField('UserProfile') class Meta: verbose_name_plural = "用户组表" def __str__(self): return self.name
7、资产标签表
1、解决了什么问题
1、如果服务器多的话,我可以给它打个标签
2、就像我们写博客的时候可以打多个标签
3、一台服务器可以打多个标签?和小米做了一次技术分享,他对每一台机器打多个标签
4、以后查找的时候可以通过几个关键字能进行快速的查找
2、代码
class Tag(models.Model): """ 资产标签 """ name = models.CharField('标签', max_length=32, unique=True) class Meta: verbose_name_plural = "标签表" def __str__(self): return self.name
3、错误日志代码
class ErrorLog(models.Model): """ 错误日志,如:agent采集数据错误 或 运行错误 """ server_obj = models.ForeignKey('Server', null=True, blank=True) title = models.CharField(max_length=16) content = models.TextField() create_at = models.DateTimeField(auto_now_add=True) class Meta: verbose_name_plural = "错误日志表" def __str__(self): return self.title