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).自增長方式的數字。
索引只能是儲存資料的指定屬性。
相關文章
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- indexedDB 資料庫主鍵Index資料庫
- indexedDB 內鍵與外來鍵Index
- indexedDB 修改索引Index索引
- indexedDB 資料庫 索引Index資料庫索引
- localforage indexedDB如何使用索引Index索引
- ClickHouse主鍵索引最佳實踐索引
- mysql刪除主鍵索引,刪除索引語法MySql索引
- 主鍵為聯合主鍵時,索引B+樹結構索引
- 主鍵索引存的是行嗎?❌索引
- indexedDB 通過索引查詢資料Index索引
- mysql索引型別Normal,Unique,Full Text區別以及索引方法Btree,Hash的區別MySql索引型別ORM
- impdp導致主鍵索引的變化索引
- [20210520]關於主鍵索引問題.txt索引
- MySQL 聚簇索引一定是主鍵嗎MySql索引
- SQLSERVER 的主鍵索引真的是物理有序嗎?SQLServer索引
- 美國雲主機與傳統虛擬主機的區別
- 虛擬主機、VPS主機與雲伺服器的區別伺服器
- final與static關鍵字的區別?(skycto JEEditor)
- 雲伺服器與虛擬主機的區別伺服器
- mysql主從和主備的區別MySql
- 主鍵約束、唯一約束和唯一索引索引
- 一條主鍵索引SQL導致的CPU被打滿索引SQL
- 海外主機是什麼意思?與國內主機有什麼區別?
- 恆訊科技分析:虛擬主機與vps主機有什麼區別?
- 雲伺服器知識雲主機與vps區別伺服器
- IndexedDB使用與出坑指南Index
- #define巨集與列舉以及typedef關鍵字的區別
- sqlserver索引重建和索引重組的區別和操作方法SQLServer索引
- Elasticsearch之索引模板index template與索引別名index aliasElasticsearch索引Index
- Linux虛擬主機與Windows虛擬主機之間有什麼區別LinuxWindows
- NULL在oracle和mysql索引上的區別NullOracleMySql索引
- 一次搞懂MySQL(所有)索引及其區別MySql索引
- Python3 關鍵字nonlocal和global的用法與區別Python
- ??與?:的區別
- 與雲主機相比,裸金屬伺服器區別在哪裡?伺服器
- phoenix全域性索引和本地索引 概述,使用場景,區別等詳解索引
- 聚簇索引和非聚簇索引到底有什麼區別?索引