sql - 描述 IT 环境的数据库模型

标签 sql database django database-design django-models

<分区>

我正在考虑编写一个 Django 应用程序来帮助记录相当小的 IT 环境。由于每台设备的属性数量可能会有所不同,即使是同一类型的设备,我也无法更好地建模数据。例如,SAN 将具有 1 个或多个阵列,以及 1 个或多个卷。然后,阵列将具有名称、RAID 级别、大小、磁盘数量属性,而卷将具有大小和名称属性。不同的 SAN 将具有不同数量的阵列和卷。

服务器也是如此,每个服务器可能有不同数量的磁盘/分区,所有这些都将具有大小、已用空间等属性,并且这会因服务器而异。

另一种设备类型可能是交换机,它不会有阵列或卷,但会有许多网络端口,其中一些可能是千兆位,其他的可能是 10/100,其他的可能是 10Gigabit,等等。

此外,我希望将来能够在不更改模型的情况下添加设备类型。一种新的设备类型可能是电话系统,它将具有自己独特的属性,这些属性可能因不同的电话系统而异。

我研究过 EAV 数据库设计,但它似乎很快变得非常复杂,我不清楚这是否是解决此问题的最佳方法。如图所示,我正在考虑沿着模型的方向思考一些事情。

http://i.stack.imgur.com/ZMnNl.jpg

一个好处是能够在特定时间创建环境的“快照”,从而可以查看环境随时间的变化。在属性表中添加日期列可能是解决此问题的一种方法。

郑重声明,此应用不需要扩展太多(最多 1000 台设备),因此大规模的可扩展性不是大问题。

最佳答案

由于您的属性是针对每个模型实例的,并且每个实例都不同, 我建议使用完全免费的架构

class ITEntity(Model):
    name = CharField()

class ITAttribute(Modle)
    name = CharField()
    value = CharField()
    entity = ForeignKey(ITEntity, related_name="attrs")

这是一个非常简单的模型,您可以完成其余的工作,例如应用代码中的模板(即交换机模板、路由器模板等)——它比使用像 EAV 这样的复杂模型(我喜欢 EAV,但这似乎不是这个的用例)。

添加历史记录也很简单 - 只需将时间戳添加到 ITAttribute。更改属性时 - 创建新属性。然后获取属性选择具有最新时间戳的那个。这样您就可以随时了解您的环境。

关于sql - 描述 IT 环境的数据库模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547851/

相关文章:

mysql - 创建 FOREIGN KEY 时出错

java - 将 MySql 中两个表的数据导入 Android 应用程序

mysql - 最优数据库结构

django - 使用 Django 项目在运行时动态添加到 TEMPLATE_DIRS

Django - 将模型名称作为参数传递给通用 View

python - 在 Django 中删除对象后将数据保存在变量中

sql - 从 Snowflake 中的表中选择随机百分比(使用 WHERE 子句时)

MySQL显示菜单包括父菜单

mysql - 无符号浮点到有符号浮点 - Laravel Mysql

ruby-on-rails - 单个数据库条目 rails 3 的多个文本字段