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