我確實想在HTML5索引數據庫中連接兩個表。 我發現很多樣品要添加,更新,刪除和列表記錄,但找不到任何樣品加入多個表。如何在HTML5中使用連接索引的Db?
- 樣品網址: * http://users.telenet.be/kristofdegrave/ *
我確實想在HTML5索引數據庫中連接兩個表。 我發現很多樣品要添加,更新,刪除和列表記錄,但找不到任何樣品加入多個表。如何在HTML5中使用連接索引的Db?
據我所知,是IndexedDB沒有做加入一個API,然而。我採用的解決方案包括打開遊標,循環搜索結果和手動執行加入。這是可怕的RBAR方法,但我找不到更好的解決方案。
IndexedDB實際上是一個對象存儲,並且在對象存儲中非常普通,因此只需保存嵌套結構就不需要連接。
在你展示的情況下,來自代碼表的數據會與真實數據相結合。沒有連接的情況下解決這個問題只是將你的代碼表取到內存中(通常這些數據永遠不會改變),並在代碼中進行連接。
沒有連接,但可以在遊標迭代過程中打開多個對象存儲並進行連接。
用自己ydn-db庫,可以通過
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]);
查看Join query article詳細查詢SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY
。
在總體看待這些技術時,想知道同樣的問題。沒有檢查你的具體的例子,但這裏是從Mozilla的關於如何做一個連接,如果你需要它的一個例子:
https://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/
這是一個相當大量的代碼相比,SQL,但是我認爲這個想法以後使用JavaScript進行抽象是很容易的。
自此以後,發生了很多變化。有關2016年如何做的更新? – Rexford 2016-04-01 19:04:43
而不是嘗試加入,重新設計您如何存儲數據,以便不需要連接。當您使用no-sql方法時,不需要遵循與SQL相同的規範化約束。 No-sql支持在適當的時候冗餘地存儲數據。
+1,嘿克里斯托夫感謝您的輸入,你可以顯示一些代碼或網址。 – 2012-08-28 17:11:06