我正在创建一个用于跟踪网络上计算机配置的应用程序。 “配置”广义地定义了系统上安装的产品/服务/ OS /应用程序。其中任何一个的变化都会导致配置发生变化。 使用扫描仪获取信息。数据已经过解析。我需要找到一种有效存储数据的方法。
基本理念是
我坚持定义一组合适的表来帮助我实现以下目标
我得到的数据是IP和条目集及其类型标识符。例如。
IP - x.y.z.w :
Entries - Microsoft Windows XP :1(Type-OS),
Apache HTTP 2.3 :2(Type-Service),
Mozilla Firefox :3(Type - Application)
早些时候,当我没有对配置感到困扰,只是必须存储条目我有以下方案
Table ip_map : id int, ip char #Table that keeps track of IPs
Table ip_ref: id int , ip_id references ip_map(id), t_stamp timestamp, archived bool, type smallint #Table that keeps IPs and type
Table current_network: id int, ip_ref_id references ip_ref(id), port int, vendor, product,version #Table that stores actual entries
即。 - 我使用IP和类型信息识别了条目。
如果我需要实现配置,该方案应该有点像
ip_map:
+--+-------+
|id|ip |
+--+-------+
|1 |x.y.z.w|
+--+-------+
ip_config:
+--+------+----------+--------+----------+
|id|ip_id |t_stamp |archived|config_num|
+--+------+----------+--------+----------+
|1 |1 |1212231313| 1 | 1 |
|2 |1 |1212299999| 0 | 2 |
+--+------+----------+--------+----------+
在此之后,我陷入困境。理想情况下,config_num是指向配置表主键的外键。但由于配置由不同类型组成,因此似乎不可能。这就是我的想法。
config:
+--+---+----+
|id|num|type|
+--+---+----+
|1 | 1 | 1 |
|2 | 1 | 2 |
|3 | 2 | 1 |
|4 | 2 | 2 |
+--+---+----+
entry:
+--+---------+----+-------------+-------------+-------------+
|id|config_id|port|vendor | product | version |
+--+---------+----+-------------+-------------+-------------+
|1 | 1 | 0 | Microsoft | Windows | XP |
|2 | 1 | 0 | Microsoft | Windows | 7 Home |
|3 | 2 | 80 | Apache | HTTP Server | 2.3.19 |
|4 | 3 | 0 | Linux | Linux | 2.6 |
|5 | 3 | 0 | Linux | Linux | 2.4 |
|6 | 4 | 22 | OpenSSH | SSHD | 4.3p1 |
+--+---------+----+-------------+-------------+-------------+
但它破坏了一致性(由于缺少ip_config和config表之间的外键)。 IP可能会被删除,但配置将继续存在。 如何改变设计以适应我的要求?
注意:理想情况下,应该单独维护类型信息(对于每个IP或配置),因为这是程序的一个单独部分所期望的。
答案 0 :(得分:1)
我不能说我理解这里的一切,所以这个例子可能会给你一些想法。
从ConfigurationType
开始,可以是1- OS; 2- Service ...
Configuration
表包含所有可能(允许)的配置。 ConfigurationTypeNo
是每个ConfigurationTypeID
的整数(1,2,3 ...) - 所以有OS(1,2,3 ..);服务(1,2,3 ......)等。
SystemConfiguration
捕获每个系统的配置设置历史记录。如果TimeChanged
是PK的一部分,则可以重复相同的配置。
IP_Allocation
跟踪IP分配的历史记录。