UNPKG

relational-indexdb

Version:

This is an indexDB database relational encapsulation

374 lines (274 loc) 11.8 kB
# relational-indexdb 使用说明 ##### IndexedDB: - IndexedDB 是一种客户端存储技术 非关系型数据库,用于在 Web 浏览器中存储和检索大量结构化数据。 - 它提供了一个类似关系型数据库的API,但是数据存储在浏览器中而不是远程服务器上。 - IndexedDB 使用对象存储空间来存储和检索数据,类似于关系型数据库的表。 - 它支持复杂的查询和索引,以及事务操作。 - IndexedDB 在 Web 应用程序中广泛用于离线数据存储、缓存数据和本地数据持久化等场景。 - ### 虽然index DB是非关系型数据库 但是a yong为大家封装好了各种方法(updateDataByCursor、queryDataByCursor、deleteDataByCursor) 可以到达关系型数据库 那样的操作效果所以财位组件名字命名为relational-indexdb 当谈到数据库时,有两种主要类型:关系型数据库和非关系型数据库。下面是对它们以及 IndexedDB 的简要介绍: 1. ### 关系型数据库: - 关系型数据库使用表格结构来组织和存储数据。 - 数据以行和列的形式存储在表中,其中每行表示一个记录,每列表示一个属性或字段。 - 数据之间通过关系(主键和外键)建立关联。 - 常见的关系型数据库有 MySQL、Oracle、SQL Server 和 PostgreSQL。 2. ### 非关系型数据库(NoSQL): - 非关系型数据库采用不同的数据模型,如键值对、文档、列族和图形等。 - 它们通常更灵活,适用于处理大量非结构化和半结构化数据。 - 没有固定的表格结构,允许动态添加或删除字段。 - 常见的非关系型数据库有 MongoDB、Cassandra、Redis 和 Elasticsearch。 ##### RelationalIndexDB构造函数 | 参数 | 类型 | 描述 | | :------------ | -------------- | ------------ | | databaseName | string | 数据库名称 | | version | number | 数据库版本号 | | tableName | string | 表名 | | keyPath | string | 主键 | | autoIncrement | boolean | 是否自增 | | indexConfigs | IndexConfigs[] | 索引配置 | ```javascript const tableName = 'myTable'; const version = 1; const keyPath = 'id'; const tableSchema = [ {name: 'id', keyPath: 'id', unique: true}, {name: 'issue', keyPath: 'issue', unique: false}, {name: 'answer', keyPath: 'answer', unique: false}, ]; //在new RelationalIndexDB 示例时候将会创建一个数据表 const indexDB = new RelationalIndexDB('ayong', 1, tableName, keyPath, true, tableSchema); ``` ### 方法methds ⚠️ 所有方法返回值都是proms #### createTable(tableName, version, keyPath, autoIncrement, indexConfigs) 新增/创建表。 | 参数 | 类型 | 描述 | | ------------- | -------------- | -------- | | tableName | string | 表名 | | version | number | 版本号 | | keyPath | string | 主键 | | autoIncrement | boolean | 是否自增 | | indexConfigs | IndexConfigs[] | 索引配置 | ##### IndexConfigs 表配置字段结介绍 | 字段 | 类型 | 描述 | | ------- | ------- | ------------------------------------------------ | | name | string | 索引名称,用于标识该索引在对象存储空间中的唯一性 | | keyPath | string | 索引字段的路径,指定要索引的属性或键路径 | | unique | boolean | 指示索引的值是否唯一,默认为`false` | ```javascript const indexConfigs = [ { name: 'nameIndex', keyPath: 'name', unique: false }, { name: 'ageIndex', keyPath: 'age', unique: true }, ]; ``` createTable使用代码示例 ```javascript const indexDB = new RelationalIndexDB('myDatabase', 2); indexDB.createTable('myTable', 1, 'id', true, [ { name: 'id', keyPath: 'id', unique: true }, {name: 'title', keyPath: 'title', unique: false}, {name: 'useName', keyPath: 'useName', unique: false}, {name: 'level', keyPath: 'level', unique: false} ]); ``` #### addRecord(key) 添加数据 | 参数 | 类型 | 描述 | | --------- | ------ | ---------------------------------------------- | | tableName | string | 表名 | | data | Object | 存储数据:数据结构要与表结构相对应,主键不能重复 | ```javascript indexDB.addRecord('myTable', { id: '123', useName: 'John Doe', title: '阿勇学前端', level: 100 }); ``` #### queryRecord(tableName,key) 根据主键查询数据 | 参数 | 类型 | 描述 | | --------- | ------ | ------ | | tableName | string | 表名 | | key | string | 主键值 | ``` indexDB.deleteRecord('myTable', '123'); ``` #### deleteRecord(tableName, key) 删除记录。 | 参数 | 类型 | 描述 | | --------- | ------ | ------ | | tableName | string | 表名 | | key | any | 主键值 | ```javascript //删除主键 为123 的那条数据 indexDB.updateRecord('myTable', '123'); ``` #### updateRecord(tableName, key, newData) 更新数据。 | 参数 | 类型 | 描述 | | --------- | ------ | --------------------------------------------------- | | tableName | string | 表名 | | key | any | 主键值 | | newData | any | 新数据对象:要修改的具体字段会与老数据覆盖相同的ke y | ```javascript /** *这示例将会更新myTable表中 主键为 123。这条数据中 表字段 name 修改为 John Smith,更改哪个字段就写入哪个字段的新值就可以了 类似于mysql中的s q l语句 但是要注意 index DB不能执行s q l 他是非关系型数据库 UPDATE myTable SET name = 'John Smith' WHERE id = 123; */ indexDB.updateRecord('myTable', '123', { name: 'John Smith' }); ``` #### batchUpdateRecords(tableName, updatesToUpdate) | 参数 | 类型 | 描述 | | --------------- | ----------------- | ---------------------------------- | | tableName | string | 表名 | | updatesToUpdate | updatesToUpdate[] | 要批量修改的列表数组字段详情见下方 | updatesToUpdate[] 批量修改的列表数组字段详情 | 参数 | 类型 | 描述 | | ------------ | ------ | -------------- | | keyPathValue | string | 要修改的主键值 | | data | Object | 要修改的字段 | ```javascript /** * 批量更新跟updateRecord 一样 不同的是更新多条 * **/ indexDB.batchUpdateRecords("myTable", [{ keyPathValue: 1688291753347, data: { id: 1688291753347, name: 'ayong---6666' } }, { keyPathValue: 1688291767078, data: { id: 1688291767078, title: '阿勇学前端' } } ]) ``` #### batchDeleteRecords(tableName, keysToDelete) 批量删除数据。 | 参数 | 类型 | 描述 | | ------------ | ------ | -------------------- | | tableName | string | 表名 | | keysToDelete | any[] | 需要删除的主键值数组 | ```javascript const keys = ['123', '456']; indexDB.batchDeleteRecords('myTable', keys); ``` #### deleteTable(tableName) 删除表。 | 参数 | 类型 | 描述 | | --------- | ------ | ---- | | tableName | string | 表名 | ``` indexDB.deleteTable('myTable'); ``` #### queryRecordsInRange(tableName, indexName, start, end) 范围查询记录。 | 类型 | 描述 | | | --------- | ------ | ---------- | | tableName | string | 表名 | | indexName | string | 索引名 | | start | any | 范围起始值 | | end | any | 范围结束值 | ```javascript //查询主键为id 值在1——20 之间的数据 indexDB.queryRecordsInRange('myTable', 'id', 1, 10).then((record) => { console.log('Record-----:', record); }) ``` #### deleteRecordsInRange(tableName, indexName, start, end) | 参数 | 类型 | 描述 | | --------- | ------ | ---------- | | tableName | string | 表名 | | indexName | string | 索引名 | | start | any | 范围起始值 | | end | any | 范围结束值 | ```javascript //删除主键为id 值在1——20 之间的数据 indexDB.deleteRecordsInRange('myTable', 'id', 1, 10).then((record) => { console.log('Record-----:', record); }) ``` 范围修改记录。 | 参数 | 类型 | 描述 | | --------- | ------ | -------------- | | tableName | string | 表名 | | indexName | string | 索引名 | | start | any | 范围起始值 | | end | any | 范围结束值 | | newData | any | 要更新的新数据 | ## deleteDataByCursor(tableName: string, condition: object): Promise<void> | 参数 | 类型 | 描述 | | --------- | ------ | -------------- | | tableName | string | 表名 | | condition | object | 删除的条件对象 | ```javascript /** 这个方法就是筛选符合条件数据 将这条数据删除 * 删除title = 无意义内卷 id:'123 的这条数据 就是符合多条件筛选条件 并操作这条数据 与之前的范围修改数据deleteRecordsInRange batchDeleteRecords 不同的是他们都是以主键为筛选条件操作数据 这个方法可以提供给你可以任意以表结构中筛选任意字段 符合条件后操作数据 它类似于mysql中 s q l 语句 DELETE FROM myTable WHERE title = '无意义内卷' AND id = '123'; * **/ indexDB.deleteDataByCursor('myTable', { title: '无意义内卷',id:'123' }) .then(() => { console.log('数据删除成功'); }) .catch((error) => { console.log('删除数据时发生错误:', error); }); ``` ## updateDataByCursor 该方法用于通过游标更新符合条件的数据。 | 参数 | 类型 | 描述 | | ---------- | ------ | -------------- | | tableName | string | 表名 | | condition | object | 更新的条件对象 | | updateData | object | 更新的数据对象 | ```javascript /** *如果更改的数据字段中有主键 例如这个表中的主键是id。那你的id 不能跟被的数据重复 它类似于s q l中的 UPDATE myTable SET title = '我要加油', id = '1231231' WHERE title = '无意义内卷' AND id = '123'; **/ indexDB.updateDataByCursor('myTable', { title: '无意义内卷',id:'123' }, { title: '我要加油',id:'1231231' }) .then(() => { console.log('数据更新成功'); }) .catch((error) => { console.log('更新数据时发生错误:', error); }); ``` ## queryDataByCursor 该方法用于通过游标查询符合条件的数据。 | 参数 | 类型 | 描述 | | --------- | ------ | -------------- | | tableName | string | 表名 | | condition | object | 查询的条件对象 | ```javascript /** 根据表中多个字段查询数据 ;查询title = '无意义内卷'并且id = '123' 的数据 它类似于s q l中的 SELECT * FROM myTable WHERE title = '无意义内卷' AND id = '123'; **/ indexDB.queryDataByCursor('myTable', { age: 30 }) .then((results) => { console.log('查询到的数据:', results); }) .catch((error) => { console.log('查询数据时发生错误:', error); }); ``` #### clearTable(tableName) | 参数 | 类型 | 描述 | | --------- | ------ | ---- | | tableName | string | 表名 | ``` indexDB.clearTable('myTable'); ``` #### deleteDatabase() 删除数据库。 ``` indexDB.deleteDatabase(); ```