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

  

  

posted @ 2018-07-29 12:39  活的潇洒80  阅读(385)  评论(0编辑  收藏  举报