CMDB资产管理系统的数据表设计
|
Server表:
asset = models.OneToOneField('Asset')
主机名(hostname)
sn号(sn)
制造商(manufacture)
系统(os_platform)
系统版本(os_version)
CPU个数(cpu_count)
CPU版本(cpu_model)
创建的时间(ctime)
Disk表:
插槽位(slot)
磁盘型号(model)
磁盘容量(capacity)
磁盘类型(pd_type)
对server的外键(server_obj)
Nic(网卡信息)表:
网卡名称(nic_name)
mac地址(hwaddr)
子网掩码(netmask)
ip地址(ipaddr)
对server的外键(server_obj)
Memory(内存)表:
插槽位(slot)
型号(model)
容量(capacity)
内存sn号(sn)
对server的外键(server_obj)
|
server表除了上述的信息之外,我们是不是还得增加一下,这个server是放置在哪个机柜的哪一层上,因此我们需要给server表增加如下的两个字段
|
1
2
|
cabinet_num (机柜号)
cabinet_order(机柜中序号)
|
那此时又来一个问题,上面只是我们采集的server的信息,那如果我们还要采集交换机,路由器的信息呢?我们是不是还得搞一张网络设备的表吧,结构如下:
|
1
2
3
4
5
6
7
|
NetWorkDevice表:
asset = models.OneToOneField('Asset')
management_ip (管理IP)
vlan_ip (VlanIP)
intranet_ip (内网IP)
sn (SN号)
manufacture (制造商)
|
那此时,又出现了和上面server表一样的问题,是不是还得加上这个设备放置在哪个机柜的哪一层上,因此我们是不是又得给NetWorkDevice表增加如下的两个字段
|
1
2
|
cabinet_num (机柜号)
cabinet_order(机柜中序号)
|
如此这般,我们思考一下,我们能不能把这些相同的属性抽离出来呢,在搞成一张单独的表,并和上面的server表和NetWorkDevice表做一个一对一的关联
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
Asset表:
device_type_choices = (
(1, '服务器'),
(2, '交换机'),
(3, '防火墙'),
)
device_status_choices = (
(1, '上架'),
(2, '在线'),
(3, '离线'),
(4, '下架'),
)
device_type_id = models.IntegerField(choices=device_type_choices, default=1)
device_status_id = models.IntegerField(choices=device_status_choices, default=1)
cabinet_num = models.CharField('机柜号', max_length=30, null=True, blank=True)
cabinet_order = models.CharField('机柜中序号', max_length=30, null=True, blank=True)
idc = models.ForeignKey('IDC', verbose_name='IDC机房', null=True, blank=True)
product_line = models.ForeignKey('ProductLine', verbose_name='属于的业务线', null=True, blank=True)
create_at = models.DateTimeField(auto_now_add=True)
|
接下来我们在思考,我们的服务器或者说其他的网络设备,是不是应该分配给我们的产品线使用,因此,我们是不是需要一个产品线表
|
1
2
3
4
5
6
7
8
9
10
11
|
ProductLine:
name = models.CharField('业务线', max_length=64, unique=True)
contact = models.ForeignKey('UserGroup', verbose_name='业务联系人', related_name='c')
manager = models.ForeignKey('UserGroup', verbose_name='系统管理员', related_name='m')
IDC:
name = models.CharField('机房', max_length=32)
floor = models.IntegerField('楼层', default=1)
|
接下来,就是该考虑一下这个业务线是不是应该有个管理员或者说业务线的联系人,这样的话,出了事情我们可以联系到
|
1
2
3
4
5
6
7
8
|
UserProfile:
name = models.CharField(u'姓名', max_length=32)
email = models.EmailField(u'邮箱')
phone = models.CharField(u'座机', max_length=32)
mobile = models.CharField(u'手机', max_length=32)
password = models.CharField(u'密码', max_length=64)
|
按道理来说,我们的业务线应该关联的是我们的UserProfile表,但是由于我们需要有一个备选的人员,因此我们还需要一个组,以后我们的业务线只需要关联组就OK了
|
1
2
3
4
5
|
UserGroup:
name = models.CharField(max_length=32, unique=True)
users = models.ManyToManyField('UserProfile')
|
除了上述的几张表之外,我们还需要如下的表
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class AssetRecord(models.Model):
"""
资产变更记录,creator为空时,表示是资产汇报的数据。
"""
asset_obj = models.ForeignKey('Asset', related_name='ar')
content = models.TextField(null=True)# 新增硬盘
creator = models.ForeignKey('UserProfile', null=True, blank=True) #
create_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = "资产记录表"
class ErrorLog(models.Model):
"""
错误日志,如:agent采集数据错误 或 运行错误
"""
asset_obj = models.ForeignKey('Asset', 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 = "错误日志表"
|
CMDB资产管理系统的数据表设计的更多相关文章
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(五): 数据表设计、使用 jwt、redis、sms 工具类完善注册登录逻辑
(1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p ...
- Python之CMDB资产管理系统
最近正好在给公司做CMDB资产管理系统,现在做的也差不多了,现在回头吧思路整理下. CMDB介绍 CMDB --Configuration Management Database 配置管理数据库, C ...
- 【原创】C#搭建足球赛事资料库与预测平台(6) 赔率数据表设计2
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...
- 【原创】C#搭建足球赛事资料库与预测平台(3) 基础数据表设计
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源C#彩票数据资料库系列文章总目录:http://www.cn ...
- 【原创】C#搭建足球赛事资料库与预测平台(4) 比赛信息数据表设计
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [5] 版本设计分析及数据表设计
APP 版本升级以及 APP 演示 ① 版本升级分析以及数据表设计 ② 版本升级接口开发以及 APP 演示 /** * version_upgrade 版本升级信息表 */ CREATE TABLE ...
- mysql status关键字 数据表设计中慎重使用
mysql status关键字 数据表设计中慎重使用
- 中小型WEB系统权限日志数据表设计
中小型WEB系统权限日志数据表设计 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc1MDU3OA==/font/5a6L5L2T/fontsi ...
- MySql数据表设计,索引优化,SQL优化,其他数据库
MySql数据表设计,索引优化,SQL优化,其他数据库 1.数据表设计 1.1数据类型 1.2避免空值 1.3text类型优化 2.索引优化 2.1索引分类 2.2索引优化 3.SQL优化 3.1分批 ...
随机推荐
- CPP-基础:运算符重载详解
1.运算符重载定义: C++中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作.这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功 ...
- iOS开发各种证书问题
引言 写在前面 一.App ID(bundle identifier) 二.设备(Device) 三.开发证书(Certificates) 四.供应配置文件(Provisioning ...
- python-DB模块
基于python的接口测试框架设计 连接数据库 首先是连接数据库的操作,最好是单独写在一个模块里, 然后便于方便的调用,基于把connection连接放在__init__()方法里 然后分别定义D ...
- shell脚本,每5个字符之间插入"|",行末不插入“|”。
文本aaaaabbbbbcccccdddd eeeeefffffkkkkkvvvv nnnnnggggg 希望得到的结果如下: aaaaa|bbbbb|ccccc|dddd eeeee|fffff|k ...
- Linux关于FTP安全
https://www.cnblogs.com/Hyber/archive/2017/02/04/6362916.htmlhttps://www.cnblogs.com/ichunqiu/p/7300 ...
- python3.x 多路IO复用补充asyncio
asyncio模块是python之父写的模块,按说应该是靠谱的,python3.6版本定义为稳定版本. 说明书:https://docs.python.org/3/library/asyncio.ht ...
- logstash-基础操作
一.环境 https://www.cnblogs.com/suffergtf/p/9566145.html 1.收取日志文件到elasticsearch [root@linux-node1 logst ...
- link与@import导入css样式区别
XML/HTML代码<link rel="stylesheet" rev="stylesheet" href="CSS文件" type ...
- Shell:命令用户、用户组管理useradd、usermod
文件及内容处理 - useradd.usermod 1. useradd:添加用户 useradd命令的功能说明 useradd 命令用于建立用户帐号.useradd 可用来建立用户帐号.帐号建好之后 ...
- pymongo的简单使用
pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client ...