Hyperledger Fabric中有没有设计链代码数据模型的指导原则?如果我们有复杂的关系,在设计数据模型时有什么技巧吗?
例如,如果我想设计Library数据模型。每本书可以有多个作者,每个作者可以有多本书。每本书都可以标记为不同的类别。为这个例子编写链代码的最佳方式是什么,这样就可以方便地通过标记或作者进行查询?
我建议两种方法。
第一个:
如果它是一个数据,你想通过密钥使用进行查询:
key, err := stub.CreateCompositeKey(index, []string{key1, key2, key3})
// Skipped
stub.PutState(key, value)
将要查询的其他属性的密钥放在复合密钥上,然后使用:
getStateByPartialCompositeKey(objectType, attributes)
这样,您就可以通过高效的方式查询某个作者或类别的关键字来获取其图书。
第二:
如果不需要按属性查询,只需在序列化和打开状态之前将属性名称或id放入模型中即可。
使用Hyperledger composer,您可以轻松地在资产或参与之间放置RelationShip。使用extends
,您可以获取超类型所需的所有属性和字段,并从其自己的定义中添加任何其他属性或字段。有关更多信息,您可以访问模型语言概念的链接。
例如
考虑您的示例,创建一个1Asset
库。例如:
asset Library identified by LibraryId {
o String LibraryId
}
然后创建一个concept Book
,并创建一个由Book概念扩展的Participate Author
。此外,您还可以将添加字段放在任何参与/资产/概念中。