2012-08-14 10 views
5

Quiero unir dos tablas en HTML5 indexado db. Encontré muchas muestras para agregar, actualizar, eliminar y enumerar el registro, pero no puedo encontrar ninguna muestra para unir varias tablas. URLCómo utilizar las uniones en HTML5 indexado Db?

  • muestra: * http://users.telenet.be/kristofdegrave/ *

Respuesta

1

Por lo que yo sé, IndexedDB no tiene una API para hacer uniones, todavía. Las soluciones que adopté implicaban abrir un cursor, recorrer los resultados y hacer la unión manualmente. Es el enfoque terrible de RBAR, pero no pude encontrar una mejor solución.

1

IndexedDB es, de hecho, un almacén de objetos y, normalmente, en un almacén de objetos hay menos necesidad de uniones porque puede simplemente guardar la estructura anidada.

En el caso que muestre, los datos de una tabla de códigos se unen con datos reales. El caso para resolver esto sin una unión es simplemente traer su tabla de códigos a la memoria (normalmente esta información nunca cambia) y hacer la unión en el código.

+0

+1, Hola Kristof gracias por la entrada, ¿puedes mostrar algún código o URL? –

2

No hay unión, pero puede abrir varios almacenes de objetos y unirse durante las iteraciones del cursor.

Usando mi propia ydn-db biblioteca, puede consultar SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY por

var iter_supplier = new ydn.db.IndexValueIterator('Supplier', 'CITY'); 
var iter_part = new ydn.db.IndexValueIterator('Part', 'CITY'); 
var req = db.scan(function(keys, values) { 
    var SID = keys[0]; 
    var PID = keys[1]; 
    console.log(SID, PID); 
    if (!SID || !PID) { 
    return []; // done 
    } 
    var cmp = ydn.db.cmp(SID, PID); // compare keys 
    if (cmp == 0) { 
    console.log(values[0], values[1]); 
    return [true, true]; // advance both 
    } else if (cmp == 1) { 
    return [undefined, SID]; // jump PID cursor to match SID 
    } else { 
    return [PID, undefined]; // jump SID cursor to match PID 
    } 
}, [iter_supplier, iter_part]); 

Ver más detalles sobre Join query article.

5

Me estaba preguntando la misma pregunta cuando solo miraba estas tecnologías. No comprobar su ejemplo particular, pero aquí es un ejemplo de Mozilla sobre cómo hacer una unión, si lo necesita:

https://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/

Es bastante un montón de código en comparación con SQL, pero creo que la idea es que abstraer estos usando JavaScript más tarde es bastante fácil.

+0

Mucho ha cambiado desde esto. ¿Alguna actualización sobre cómo hacerlo en 2016? – Rexford

1

En lugar de tratar de unirse, rediseñar la forma de almacenar los datos para que no se requiera una unión. No necesita seguir las mismas restricciones de normalización que SQL cuando usa un enfoque sin sql. No-sql admite el almacenamiento redundante de datos cuando es apropiado.

Cuestiones relacionadas