indexedDB 索引與primarykey主鍵區別
關於索引與主鍵的用法本文不再介紹,具體參閱如下兩篇文章:
(1).主鍵可以參閱indexedDB 資料庫主鍵一章節。
(2).索引可以參閱indexedDB 資料庫 索引一章節。
為了便於掌握與理解,本文再來總結一下兩個概念的主要區別。
一.是否是必須的:
假設將如下資料存入物件倉庫,以id作為主鍵:
[JavaScript] 純文字檢視 複製程式碼let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ];
主鍵是物件倉庫中資料的唯一標識,就如同身份證號碼,是必須的。
通過上面的id可以唯一標識每一個學生,但是索引的目的是為了檢索方便。
比如我們想通過性別對學生進行檢索,那麼建立一個與sex屬性關聯的索引即可。
更多內容可以參閱indexedDB 通過索引檢索資料一章節。
二.是否唯一:
索引是為了便於檢索資料,可以通過objectStore.createIndex()方法的第三個引數規定索引是否唯一。
也就是說索引值不一定是唯一的,比如同學中女生不止一個,相同年齡的也可能不止一個。
前面提到過主鍵用於唯一標識物件倉庫中的資料,但是在物件倉庫中主鍵值可能是重複的,當然都是對應同一個值。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男", tags:["A","B","C"] },{ id:1002, name:"李四", age:20, sex:"女", tags:["B"] },{ id:1003, name:"王五", age:19, sex:"女", tags:["D","M"] } ]; let request = window.indexedDB.open("antzone", 1); let indexOBJ; request.onupgradeneeded = (ev) => { let db = ev.target.result; if (!db.objectStoreNames.contains('website')) { let objectStore = db.createObjectStore('website',{autoIncrement:true}); objectStore.createIndex('tagsIndex','tags',{multiEntry:true}); } } request.onsuccess = (ev) => { let db = ev.target.result; let transaction = db.transaction(['website'], 'readwrite'); let objectStore = transaction.objectStore('website'); for(let i=0;i<students.length;i++){ objectStore.add(students[i]); } } </script> </head> <body> <p>為物件建立索引,並新增資料</p> </body> </html>
程式碼執行效果截圖如下:
多行的主鍵值是相同的,但是並不妨礙它唯一標識一條資料,因為它們對應的value是相同的。
三.主鍵與索引路徑:
主鍵可以通過如下兩種方式建立:
(1).通過keyPath屬性規定的儲存資料的某個屬性。
(2).自增長方式的數字。
索引只能是儲存資料的指定屬性。
相關文章
- 主鍵、自增主鍵、主鍵索引、唯一索引概念區別與效能區別索引
- Oracle主鍵、唯一鍵與唯一索引的區別Oracle索引
- 主鍵和唯一索引的區別索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- 主鍵(PK)與非空唯一索引(Unique Index)的區別索引Index
- 主鍵與主鍵索引的關係索引
- indexedDB 資料庫主鍵Index資料庫
- 【INDEX】Oracle中主鍵、唯一約束與唯一索引之區別IndexOracle索引
- indexedDB 內鍵與外來鍵Index
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- indexedDB 修改索引Index索引
- indexedDB 資料庫 索引Index資料庫索引
- localforage indexedDB如何使用索引Index索引
- MYSQL中的普通索引,主健,唯一,全文索引區別MySql索引
- 分割槽表本地索引與全域性索引的區別索引
- ClickHouse主鍵索引最佳實踐索引
- 【fk_index】外來鍵中有無索引的區別Index索引
- MYSQL INNODB主鍵使用varchar和int的區別MySql
- 主鍵為聯合主鍵時,索引B+樹結構索引
- mysql刪除主鍵索引,刪除索引語法MySql索引
- 主鍵local索引、unique local索引、分割槽索引順序的理解索引
- MySQL主機127.0.0.1與localhost區別MySql127.0.0.1localhost
- indexedDB 通過索引查詢資料Index索引
- Oracle刪除主鍵保留索引的方法Oracle索引
- mysql索引型別Normal,Unique,Full Text區別以及索引方法Btree,Hash的區別MySql索引型別ORM
- Oracle主鍵與複合主鍵的效能分析Oracle
- 美國雲主機與傳統虛擬主機的區別
- MySQL 聚簇索引一定是主鍵嗎MySql索引
- SQLSERVER 的主鍵索引真的是物理有序嗎?SQLServer索引
- 主題:Oracle中Null與空字串''''的區別OracleNull字串
- MySQL的btree索引和hash索引的區別MySql索引
- [轉]聚集索引和非聚集索引的區別索引
- 使用聚集索引和非聚集索引的區別索引
- 【Oracle】-【move】【索引】無資料的主鍵索引VALID還是UNUSABLEOracle索引
- MySQL單列索引和組合索引的區別MySql索引
- MySQL Hash索引和B-Tree索引的區別MySql索引
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- 在已存在的表結構上新增主鍵、外來鍵、聯合主鍵、聯合索引的例子索引