Relación de uno a muchos en el contrato

Si id(Ej: 1) el campo en la estructura no es único y se asignan diferentes nombres con el mismo id=1. ¿Todos los nombres asignados id=1se pueden obtener de blockchain?

pragma solidity ^0.4.4;

 contract Register{

 struct Details{
  bytes id;
  string name;

  }
 mapping (bytes => Details) DetailsTable;

 function saveBondToBC(bytes id,string name) 
 payable returns(bool success){

DetailsTable[id].id = id;
DetailsTable[id].name = name;
return true;
}

function getAllNames(bytes id) return (string){
DetailsTable[id].name; //Return latest 'name' written
 }     

Respuestas (2)

son únicos (o una relación de muchos a uno en la jerga de las bases de datos relacionales). Por ejemplo, si el ID 123 está asignado al nombre Vitalik. ¡Id 123 solo puede conducir a Vitalik y ningún otro valor! Sin embargo, otros id (por ejemplo, 947) también pueden apuntar a Vitalik (relación de muchos a uno).

Si actualiza el mapeo 123 => Vitalika 123 => Gavin, por ejemplo, entonces, obviamente, el id 123 apuntará solo a Gavin y Gavin.

No estoy seguro de si es obvio o no, pero en aras de la claridad, en esas líneas

DetailsTable[id].id = id;
DetailsTable[id].name = name;

no actualiza su mapeo en absoluto, sino solo los campos en su estructura. Además, si sus ID son dos valores diferentes, encontraría mejores nombres. Si su identificación en la estructura es la misma que la identificación para el mapeo, no tiene sentido almacenar la identificación en la estructura nuevamente (esto crea redundancia y solo agregará una sobrecarga para mantener los dos valores sincronizados).

tampoco puede recorrer el mapeo ni saber qué identificaciones se han inicializado (todas las asignaciones son válidas) si no realiza un seguimiento de sus identificaciones (ya sea en su contrato inteligente o fuera de la cadena de bloques en una base de datos)

En su contrato inteligente, podría crear una matriz para eso

bytes[] allMyUniqueIds;

luego, recorrerlo allMyUniqueIdste devolverá toda tu Detailsestructura

Sí, podría almacenar ID en una matriz. Pero lo que necesito es una relación de uno a muchos. ¿Es eso posible de alguna manera?
Si es posible. Escribí un ejemplo hace unos días. Siga este enlace ethereum.stackexchange.com/questions/37988/… y hay muchos ejemplos por ahí :)

Gracias, este funcionó para mí :)

struct IdStruct{

bytes12[] structArray; 
}

mapping(string => IdStruct) idStructs;

function appendNames(string id, bytes12 name) payable returns (bool success){ 
 idStructs[id].structArray.push(name); 
} 

function getName(string id) returns(bytes12[]){ 
return idStructs[id].structArray; 
}