三种数据结构

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

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值