`
阅读更多

不管是使用哪种语言编程,开发哪个实际项目,数据库设计一直都是开发中十分重要的一部分,数据库的逻辑实现方式决定了数据获取以及存储的逻辑表现,直接影响着数据实现的复杂程度。下面就依仗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来关联。关系,这种需要理清逻辑关系,只要关系理清了,存取是十分简单的。

 

       总的来说,个人认为这三种数据存储方式各有特点,第一种存取比较复杂,不太建议用,但是对于初学者来说清晰的逻辑关系一目了然。第二种键值对逻辑清晰,存取灵活,相互的关联关系也比较明确。建议使用。第三种,数据独立性强,只是判断逻辑关系时要仔细一一对应,可能会出现粗心的错误,数据存储时认真就好,熟练了也就挺简单的了。

 

1
0
分享到:
评论

相关推荐

    三种线性数据结构的实现

    在这个压缩包中,包含的是三种基本线性数据结构的实现:线性表、栈和队列,每种都有数组和链式两种常见方式的实现。接下来,我们将深入探讨这些数据结构及其在C++中的实现。 1. **线性表**: - **数组实现(AList....

    数据结构代码 栈 链表 队列

    压缩包中的代码可能涵盖了这三种数据结构的基本操作实现,例如用C++、Java或Python等语言编写。通过学习和实践这些代码,你可以深入了解数据结构的工作原理,并提升编程能力。同时,理解这些基本数据结构对于学习和...

    数据结构与算法:语言描述(中英文)

    在无法使用二叉查找树的时候,这三种数据结构证明对查找是很有用的。他们是:AVL树、红黑树和跳跃表。 第16章讨论了图以及图的算法。图在表示许多不同的数据类型时非常有用,特别是网络的情况。最后,第17章向读者...

    数据结构源码

    数据结构是计算机科学中的核心概念,它涉及到如何有效地组织和管理数据,以便于高效地进行...在压缩包中的"3.ds"文件中,很可能是包含了关于这三种数据结构的详细讲解和源码示例,对于学习和巩固这些知识非常有帮助。

    数据结构_顺序表_单链表_循环链表C#

    下面将详细阐述这三种数据结构及其在C#语言中的实现。 首先,顺序表是一种线性数据结构,它在内存中以连续的存储单元存储元素。在C#中,我们可以使用数组来实现顺序表。数组提供了快速访问元素的能力,因为可以通过...

    数据结构和算法分析 C++版 第三版

    算法分析可以分为Best Case、Worst Case和Average Case三种,分别对应算法在最优、最坏和平均情况下的性能。算法分析的结果可以用来选择合适的算法和数据结构,以提高程序的性能和效率。 数学预备知识 数学预备...

    数据结构实验一、二、三实验报告

    在实验报告中,学生应该清楚地解释每种数据结构的工作原理,展示他们的代码实现,包括关键函数的详细注释,并分析其运行效率。此外,学生还应反思实验过程中的困难和挑战,以及如何克服这些问题。最后,通过对比不同...

    数据结构(C语言版)第三版__清华大学出版社_习题参考答案分享.pdf

    * 树结构:是一种数据结构,用于存储一组有层次关系的数据元素。 * 图结构:是一种数据结构,用于存储一组有关系的数据元素。 本资源涵盖了数据结构的基本概念、算法和程序设计、时间复杂度和空间复杂度、数据结构...

    《数据结构(C++语言版)第三版_邓俊辉》

    《数据结构(C++语言版)第三版_邓俊辉》是一本深受欢迎的教材,它专为学习数据结构和算法的计算机科学与技术学生及专业人士设计。这本书由邓俊辉教授编写,以其清晰的讲解风格和丰富的实例而闻名。第三版在前两版的...

    数据结构(唐发根)

    3. **栈与队列**:栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等场景。队列是先进先出(FIFO)的数据结构,适用于任务调度、打印队列等。 4. **树形结构**:树是层次化的数据结构,包括二叉树...

    数据结构教程第三版 李春葆

    《数据结构教程第三版》由李春葆编写,是一本广泛使用的教材,涵盖了数据结构的基础理论和实践应用。本书不仅提供了详细的概念解释,还配以丰富的习题,帮助学生巩固所学知识。 1. **数组**:数组是最基本的数据...

    王红梅数据结构答案.pdf

    从逻辑关系上讲,数据结构主要分为集合、线性结构、树结构和图结构四种。顺序存储结构和链接存储结构是两种基本的数据存储方法,不论哪种存储结构,都要存储两方面的内容:数据元素和数据元素之间的关系。 3. 算法...

    数据结构 (c++语言版)第三版 邓俊辉著

    邓俊辉教授的《数据结构(C++语言版)第三版》是一本深入浅出的数据结构教材,特别适合C++编程者学习。该书以其详尽的讲解和丰富的实例,深受广大读者喜爱。 本书首先介绍了数据结构的基本概念,包括数组、链表、栈...

    李云清版数据结构答案

    数据结构涉及三个方面的内容,即数据的逻辑结构、数据的存储结构和数据的运算集合。 在了解数据结构的定义和组成部分后,我们可以继续探讨数据结构的类型。线性结构是指元素之间的关系是一对一的,在线性结构中只有...

    数据结构 二叉树三种遍历的非递归算法(背诵版).doc

    本资料“数据结构 二叉树三种遍历的非递归算法(背诵版)”着重介绍了二叉树的三种主要遍历方法——前序遍历、中序遍历和后序遍历的非递归实现。 **前序遍历**: 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。非...

    线性表数据结构实现

    下面将详细介绍这三种数据结构及其在C++中的实现。 1. **链表**: 链表是一种非连续存储的数据结构,每个节点包含数据和指向下一个节点的指针。在C++中,我们可以创建一个结构体或类来表示链表节点,包含数据成员...

    数据结构与算法分析C++描述(第三版)_数据开发_数据结构与算法分析第三版C++_

    《数据结构与算法分析C++描述(第三版)》是一本深入探讨数据结构和算法的专著,由Mark Allen Weiss撰写。这本书以C++编程语言为载体,详细阐述了数据组织方式和解决问题的有效方法,是计算机科学教育领域的重要教材...

    数据结构 二叉树 哈夫曼树 图

    在给定的标题“数据结构 二叉树 哈夫曼树 图”以及描述中提到的“c++”,我们可以推断出这个压缩包文件可能包含了关于数据结构的课程作业,特别是涉及二叉树、哈夫曼树和图这三种数据结构的C++实现。下面将详细介绍...

    数据结构课程设计链表、树和图JAVA代码

    下面将详细阐述这三种数据结构及其在Java中的实现方式。 1. **链表** 链表是一种线性数据结构,与数组不同,它的元素在内存中并不连续。链表由一系列节点组成,每个节点包含数据以及指向下一个节点的引用。Java中...

    北航--数据结构课件

    栈是一种后进先出(LIFO)的数据结构,常用于递归和函数调用;队列则遵循先进先出(FIFO)原则,常用于任务调度和缓冲区管理。 非线性数据结构如树、图、哈希表和堆等则更为复杂。树结构包括二叉树、平衡树(AVL树...

Global site tag (gtag.js) - Google Analytics