数据库三范式在YANG模型中的应用解读

文章讨论了YANG模型在NETCONF北向接口中的应用,强调理解数据库的三范式对于YANG模型设计的重要性。作者指出,一些设备的YANG模型违反了第一范式,如单板风扇转速建模,数据非原子性。此外,文章提醒模型开发者应避免第二范式的错误,如冗余的主键字段和缺失的唯一标识。最后,解释了第三范式,强调非主键字段与主键的整体相关性。文章呼吁国内YANG开发人员参考思科、juniper等公司的最佳实践,提升模型质量。
摘要由CSDN通过智能技术生成

有人问:你一个搞北向接口 ”NETCONF/YANG"的,咋突然发啥数据库三范式了?你又不搞数据库。

话虽如此,但是研究YANG的同学,不理解北向网管是怎么适配的,就是相当于一个裁缝不了解你顾客的身材尺寸。而且设备侧的同学在设计YANG模型的时候是怎么设计的呢?你是根据命令行翻译成了YANG模型,还是根据你的特性业务,对你的特性进行了特性建模?模型驱动(model driven)这个词听说过吧。如果你是国内公司的YANG开发人员,还在跟做MIB一样设计YANG模型,建议去github上搜搜juniper、思科的YANG。看看NMDA,理解一下基于管理对象的建模。

言归正传:

第一范式(1NF):

第一范式主要是保证数据表中的每一个字段的值必须具有原子性,也就是数据表中的每个字段的值是不可再拆分的最小数据单元。

点评:

我见过有个设备上单板风扇的建模。一个单板上有4个散热的小风扇。监控设备时要监控单板的风扇转速。模型是单板slot为键值(key),data只有一个leaf speed,数据类型为string,里面的字符串格式是“1:100;2:100;3:100;4:100;"。这串数据,明显是由4组风扇转速组成的,是可以分割的,不是原子数据字段。这就是一个典型的违反了第一范式的问题。

第二范式(2NF)

在1NF的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的,而且所有的非主键(key)字段,都必须完全依赖主键,不能只依赖主键(key)的一部分。

点评:

第二范式要求key唯一决定一条数据记录,且key中不应该有冗余的字段。比如:下面是一张实例表,每个实例有唯一的name做区分,软件内部会分配一个唯一的id。那么id是key吗?这里可以发现id做key是冗余了。

另外一种情况是多条数据有相同的key,这样会出现网管侧无法区分两条数据,就会出现数据覆盖。这种情况往往是key字段漏了。我在github上某设备厂商的yang模型中就见过这种模型,当然,后来他们厂家改掉了。

第三范式(3NF)

  • 第三范式建立在已经满足第二范式的基础上
  • 数据表中的每一个非主键字段都和主键字段直接相关
  • 也就是说数据表中的所有非主键字段不能依赖于其他非主键字段
  • 这个规则的意思是所有非主属性之间不能有依赖关系,它们是互相独立的
  • 这里的主键可以拓展成为候选键

 点评:

这个范式难理解一些。我解释下上面的第二句话:一张表无论有几个key字段,主键是一个整体,标识一个对象,表中的每一个非key字段都和这个对象直接相关。举个例子:下表是一张接口带宽的表,其中有个slot字段,slot字段不应该出现在接口带宽表中,slot、port是另外一张设备管理的表项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值