不管是使用哪种语言编程,开发哪个实际项目,数据库设计一直都是开发中十分重要的一部分,数据库的逻辑实现方式决定了数据获取以及存储的逻辑表现,直接影响着数据实现的复杂程度。下面就依仗Party_bid这个项目,谈一下使用浏览器本地存储的三种设计方式。
1、使用单一的大数组嵌套存储所有的相关属性
var two_activities = [ { name: "first activity", sign_ups: [], bids: [] }, { name: "second activity", sign_ups: [ { name:"张三", phone:"13600000000" }, { name:"李四", phone:"15600000000" }, { name:"王五", phone:"13800000000" } ], bids: [ { name:"竞价1", biddings : [ { name: "张三", phone:"13600000000", price: "12" }, { name: "李四", phone:"15600000000", price: "10" } ] }, { name:"竞价2", biddings : [ { name: "张三", phone:"13600000000", price: "10" }, { name: "李四", phone:"15600000000", price: "12" }, { name: "王五", phone:"13800000000", price: "10" } ] } ] }];
这个大数组的每个对象都有三个属性:name(活动名称)、sign_ups(报名数组)、bids(竞价数组)
其中sign_ups数组里的每个对象都有name(报名人姓名)、phone(电话)两个属性;
bids数组里的每个对象都有name(竞价名)、biddings(竞价信息数组)两个属性,其中的biddings数组对象又有name(竞价人姓名)、phone(电话)、price(竞价价格)三个属性。
这种数据结构优点是:逻辑清晰,功能存储关系明确。缺点就是存取时要判断的条件特别多,需要一层一层的剥离。比如我要进行竞价信息的存取,我要获取当前的活动名进行对比,获得该竞价数组,然后再判断查找当前的竞价名称。获得当前的竞价列表,然后再在手机号不重复的情况下,进行存储。
2、使用哈希表存储数据
哈希表是使用key:value这样的键值对来存储的,其中value可以是特定属性,也可以是对象,下面举个例子
1)value直接存属性(网址)
var hash={ "百度" :"http://www.baidu.com/", "Google" :"http://www.google.com/", "微软" :"http://www.microsoft.com/", "博客园" :"http://www.cnblogs.com/", "阿舜的博客" :"http://ashun.cmblogs.com/" };
2)value里存的是对象,对象的分别还有不同的属性
var ht = { "c1" : {"UserID":"userc1","UserName":"usercc1"}, "c2" : {"UserID":"userc2","UserName":"usercc2"}, "c3" : {"UserID":"userc3","UserName":"usercc3"} };
取的时候只需使用ht["c1"]存取对象,使用ht["c1"]["userID"]存取特定属性
3)party_bid哈希表数据存取设计
var two_activities = { "0":{ name: "first activity", sign_ups:[], bids:[], biddings:{} }, "1": { name: "second activity", sign_ups: [ { name:"张三", phone:"13600000000" }, { name:"李四", phone:"15600000000" }, { name:"王五", phone:"13800000000" } ], bids:["竞价1","竞价2"], biddings:{ "竞价1":[ { phone:"13600000000", price: "12" }, { phone:"15600000000", price: "10" } ], "竞价2": [ { phone:"13600000000", price: "10" }, { phone:"15600000000", price: "12" }, { phone:"13800000000", price: "10" } ] } } };
分别使用键值“0”、“1”来区分不同的活动,每个键值对应一个活动对象,对象里分别有name(活动名)、sign_ups(报名信息)、bids(竞价名称)、biddings(竞价信息);
报名信息数组里存储每个报名对象,有name、phone两个属性;
bids里存储产生的竞价名称,biddings竞价信息使用哈希表,使用键值“竞价1”竞价2”来分别对应不同竞价的对象信息,并与bids相对应,存储phone、price属性。
这种数据结构由于键值对的对应关系使得逻辑很清晰,存取也方便。
3、数组分离独立存储
将各个数组分别独立地存储在本地,然后使用id进行关联
var activities = [ { id:"0", name: "first activity" }, { id:"1", name: "second activity" } ];
var sign_ups = [ { name:"张三", phone:"13600000000", activity_id:"0" }, { name:"李四", phone:"15600000000", activity_id:"0" }, { name:"王五", phone:"13800000000", activity_id:"0" }, { name:"张", phone:"13600000000", activity_id:"1" }, { name:"李", phone:"15600000000", activity_id:"1" }, { name:"王", phone:"13800000000", activity_id:"1" } ]
var bids = [ { name: "竞价1", activity_id:"0", biddings:[ { phone:"13600000000", price: "9" }, { phone:"15600000000", price: "10" } ] }, { name: "竞价1", activity_id:"1", biddings:[ { phone:"13600000000", price: "12" }, { phone:"15600000000", price: "10" } ] }, { name: "竞价2", activity_id:"1", biddings:[ { phone:"13600000000", price: "10" }, { phone:"15600000000", price: "12" }, { phone:"13800000000", price: "10" } ] } ];
分别定义activity数组存储activity的id和活动名;定义报名数组存储报名信息,并且定义activity_id属性关联报的活动;竞价数组定义竞价的竞价名、对应的活动id,以及竞价信息数组,存储竞价的电话和价格。
这种数据结构的特点是每个数组之间有各自的功能属性,各个数组之间的关系使用id来关联。关系,这种需要理清逻辑关系,只要关系理清了,存取是十分简单的。
总的来说,个人认为这三种数据存储方式各有特点,第一种存取比较复杂,不太建议用,但是对于初学者来说清晰的逻辑关系一目了然。第二种键值对逻辑清晰,存取灵活,相互的关联关系也比较明确。建议使用。第三种,数据独立性强,只是判断逻辑关系时要仔细一一对应,可能会出现粗心的错误,数据存储时认真就好,熟练了也就挺简单的了。
相关推荐
在Java中,链表、数组和红黑树是常见的数据结构,它们在不同情况下具有不同的性能表现。为了评估它们的性能,我们可以进行排序时间和性能测试。 首先,我们单独测试每个数据结构的排序时间。我们生成一个包含随机...
在无法使用二叉查找树的时候,这三种数据结构证明对查找是很有用的。他们是:AVL树、红黑树和跳跃表。 第16章讨论了图以及图的算法。图在表示许多不同的数据类型时非常有用,特别是网络的情况。最后,第17章向读者...
我自己写的三种线性数据结构的实现,即线性表\栈\队列的数组及链式实现
内容提要 第1章包含离散数学和递归的一些复习材料。我相信对递归做到泰然处之的惟一办法是反复不断地看一些好的用法。因此,除第5章外,递归...对来自第4章到第6章的三种数据结构以及本章介绍的斐波那契堆进行了分析。
数据结构 二叉树三种遍历的非递归算法(背诵版). 数据结构 二叉树三种遍历的非递归算法(背诵版). 数据结构 二叉树三种遍历的非递归算法(背诵版).
对于三种数据结构的具体操作会在之后进行具体说明。用户界面采用的是C++的现成框架QT实现,QT中的大多数采用的是代码进行设计,部分才取的是ui进行设计,最后通过QT中的 connect函数 对数据结构部分和用户界面部分
三维空间数据模型与 数据结构专业:地图学与地理信息系统姓名:张小强 三维空间数据模型与数据结构全文共28页,当前为第1页。 提纲 1基本概念 2三维空间数据模型 3疑问 三维空间数据模型与数据结构全文共28页,当前...
栈和队列是两种特殊的线性表,栈是一种后进先出的数据结构,队列是一种先进先出的数据结构。栈和队列的基本操作包括入栈、出栈、入队、出队等等。栈和队列的实现可以通过数组或链表来实现。 第四章 树和图 树是一...
数据结构(data structure)是带有结构特性的...简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构
空间数据结构是数据逻辑模型与数据文件格式间的桥梁 选择一种数据逻辑模型对空间数据进行描述 一种数据结构对该模型进行表达 一种适合记录该结构的文件格式 桥梁 空间数据结构全文共82页,当前为第2页。 数据结构即...
数据结构包括数据的逻辑结构、 数据的储存结构 和数据的运算三个方面。 2. 数据结构包括 逻辑结构 、数据的存储结构和数据的运算三个方面。 3. 在算法"正确"的前提下,评价算法主要有两个指标是:时间复杂度和 空间...
逻辑结构 中图分类号:tp311.12文献标识码:a文章编号:1007-9599 (2013) 06-0000-02 1什么是数据结构 数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操 作的数据元素的集合。...
网上实现自定义数据结构时间接使用了其他高级的结构,本次我仅仅使用了数组实现了泛型 stack queue dictionary 三种数据结构,且实现了IEnumerable 接口。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示(又称映像)。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及...
2. 实现哈夫曼树数据结构,使用哈夫曼树完成如下文档的编码与译码,假设该文档由5种符号字符(A、B、C、D、E)构成 ABACDEABBCEABAACCCDEACCBAABCCCA 3. 选做:实现二叉树的中序遍历线索化数据结构 4. 选做:使用...
数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成成分, 数据的逻辑结构,数据的存储结构和数据运算结构。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同 ...
本章的重点是了解数据结构的逻辑结构、存储结构、数据的运算三方面的概念及相互关系,难点是算法复杂度的分析方法。 需要达到<识记>层次的基本概念和术语有:数据、数据元素、数据项、数据结构。特别是数据结构的...
二叉树的三种遍历的非递归算法背诵版,关于数据结构课件总结
(3)针对近年数据结构大题的出题风格(比如算法设计题目中的三段式题目:①表述算法思想;②写出算法描述;③计算算法的时间和空间复杂度),设计了独特的真题仿造部分,让读者在复习的过程中逐渐适应不同类型的...
光盘内容可在DOS环境下运行的以类C语言描述的“数据结构算法动态模拟辅助教学软件,以及在Windows环境下运行的以类PASCAL或类C两种语言描述的“数据结构算法动态模拟辅助教学软件”。 本书可作为计算机类专业或信息...