Hyperledger Composer:如何定义关系

时间:2018-04-06 11:02:02

标签: hyperledger-composer

我对如何在Hyperledger Composer .cto文件中定义关系感到有些困惑。请参阅下面的具体问题:

这里我粘贴了https://github.com/IBM/Decentralized-Energy-Composer/blob/master/models/model.cto

中的.cto文件的部分内容
participant Resident identified by residentID {
    o String residentID
    o String firstName
    o String lastName
    --> Coins coins
    --> Cash cash
    --> Energy energy
}

asset Coins identified by coinsID {
    o String coinsID
    o Double value
    o String ownerID
    o OwnerEntity ownerEntity

}

asset Energy identified by energyID {
    o String energyID
    o String units
    o Double value
    o String ownerID
    o OwnerEntity ownerEntity
} 

asset Cash identified by cashID {
    o String cashID
    o String currency
    o Double value
    o String ownerID
    o OwnerEntity ownerEntity
} 

是否应将其视为a Resident owns assets which are Coins, Cash and Energy?这可以用其他方式编写(见下文)吗?

participant Resident identified by residentID {
    o String residentID
    o String firstName
    o String lastName

}

asset Coins identified by coinsID {
    o String coinsID
    o Double value
    -->Resident owner

}

asset Energy identified by energyID {
    o String energyID
    o String units
    o Double value
    --> Resident owner
} 

asset Cash identified by cashID {
    o String cashID
    o String currency
    o Double value
    --> Resident owner
} 

所以,这基本上说每个资产都归某人所有。哪种设计被认为更好,为什么?请解释一下。

1 个答案:

答案 0 :(得分:1)

第二种设计,最有可能的是,从设计的角度来看,它更normalized。 (应该想象当前的设计是针对示例演示设置的水平设置,而不是为了更好的准备就绪的详尽设计)。业务网络模型(以及其他内容)描述了participantsassetstransactions - 建模网络 - 资源及其字段/属性/类型的声明 - 当然还有关系 - 一般来说,与old school数据库设计并不太相似。更好的解释here (scroll down)

这段关系说:

  1. 此资源 - 与其他资源有关系。
  2. 可以从“此”资源访问链接的资源(例如, 代码方面,您可以检索字段值,而无需求助 直接到该注册表来搜索和检索记录)。
  3. 在上面的设计2中:经典地,owner字段(在assets中)是一个关系字段 - 并且在引用中映射到participant记录(通过其标识字段)参与者班。在您的事务逻辑中,您可以检查相关参与者的owner.firstName值(一个示例)。

    这种关系是单向的。通过添加关系字段,参与者(在#2的情况下)可以从任何上述资产资源类型中引用(例如,来自您的交易处理逻辑/代码,智能合约的一部分)。关系不是强制执行的(它不是关系数据库),但您可以在添加/删除时自行添加逻辑以进行检查。希望这会有所帮助。