2012-08-14 4 views
5

Ich möchte zwei Tabellen in HTML5 indizierten db. Ich habe viele Beispiele zum Hinzufügen, Aktualisieren, Löschen und Auflisten von Datensätzen gefunden, kann aber keine Beispiele für mehrere Tabellen finden.Wie verwendet man Joins in HTML5 Indexed Db?

  • Beispiel-URL: * http://users.telenet.be/kristofdegrave/ *

Antwort

1

Soweit ich weiß, hat IndexedDB eine API nicht zu tun haben JOIN, noch. Die Lösungen, die ich annahm, beinhalteten das Öffnen eines Cursors, das Durchlaufen der Ergebnisse und das manuelle Ausführen der Verbindung. Es ist der schreckliche Ansatz von RBAR, aber ich konnte keine bessere Lösung finden.

1

IndexedDB ist in der Tat ein Objektspeicher und normalerweise in einem Objektspeicher gibt es weniger Bedarf für Joins, da Sie einfach die verschachtelte Struktur speichern können.

Wenn Sie anzeigen, werden Daten aus einer Codetabelle mit echten Daten verknüpft. Der Fall, um dies ohne einen Join zu lösen, ist nur holen Sie Ihre Code-Tabelle in den Speicher (normalerweise ändern sich diese Daten nie) und machen Sie den Beitritt Code.

+0

+1, Hey Kristof danke für die Eingabe, kannst du Code oder URL anzeigen. –

2

Es gibt keinen Join, aber Sie können mehrere Objektspeicher öffnen und bei Cursor-Iterationen beitreten.

meine eigene ydn-db Bibliothek verwenden, können Sie SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY Abfrage von

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]); 

Weitere Einzelheiten über Join query article.

5

War die gleiche Frage, wenn man nur diese Technologien betrachtet. Haben Sie nicht überprüfen Sie Ihre speziellen Beispiel, aber hier ist ein Beispiel von Mozilla auf, wie ein tun beitreten, wenn Sie es brauchen:

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

Es ist ziemlich viel Code im Vergleich zu SQL, aber ich denke, die Idee ist, dass das Abstrahieren dieser mit JavaScript später recht einfach ist.

+0

Seitdem hat sich viel verändert. Irgendwelche Updates wie es 2016 gemacht wird? – Rexford

1

Anstatt zu versuchen, beizutreten, ändern Sie die Art und Weise, wie Sie die Daten speichern, so dass ein Join nicht erforderlich ist. Sie müssen nicht dieselben Normalisierungseinschränkungen wie SQL verwenden, wenn Sie einen No-SQL-Ansatz verwenden. No-sql unterstützt das redundante Speichern von Daten, wenn dies sinnvoll ist.