电商 mongodb mysql,MongoDB电商数据建模

面向文档的数据

Schema 设计原则

在任何数据库系统中建模数据时,下面这些问题都需深思熟虑。

数据的基本单元是什么?

RDBMS中有带行列的数据表,键值存储中有指向不定类型值的键,MongoDB中数据的基本是BSON文档。

如何查询并更新数据?

RDBMS有即时查询和联结操作查询,MongoDB也有即时查询但不支持联结操作,键值存储只能根据单个键获取值。

应用程序的访问模式是什么?

除了理解数据的基本单元和数据库的特性,还需明确应用程序的需求。

在确定理想的数据模型前,必须问无数个与应用程序有关的问题,读写比是多少?需要何种查询?数据是如何更新的?能想到什么并发问题?数据的结构化程度如何?

设计电商数据模型

电商站点通常要求有事务,而事务是RDBMS的主要特性。

产品分类

> var doc={

slug:"gardening-tools",

ancestors:[

{name:"Home",slug:"home"},

{name:"Outdoors",slug:"outdoors"},

],

parent_id:ObjectId(),

name:"Gardening Tools",

description:"Gardening gadgets galore!"

};

> db.categories.insert(doc);

> db.categories.find();

{

"_id" : ObjectId("5a05b1e6f156220da1caf69e"),

"slug" : "gardening-tools",

"ancestors" : [

{

"name" : "Home",

"slug" : "home"

},

{

"name" : "Outdoors",

"slug" : "outdoors"

}

],

"parent_id" : ObjectId("5a05b1e6f156220da1caf69d"),

"name" : "Gardening Tools",

"description" : "Gardening gadgets galore!"

}

产品信息

存放基本产品信息,如产品名称、SKU,其他表用来关联送货信息和价格历史、属性等等。

# 创建数据库

> use eshop;

#创建文档

> var doc = {

slug:"wheel-barrow-9902", // URL短名称,需设置唯一性索引。

sku:"9902",

name:"Extra Large Wheel Barrow",

description:"Heavy duty wheel barrow...",

// 产品详情

detail:{

weight:47,// 重量

weight_units:"lbs", // 计量单位

model_num:4039283402,//厂商型号代码

manufacturer:"Acme",

color:"Green"//颜色

},

total_reviews:4,

average_reviews:4.5,

// 当前价格

pricing:{

retail:589700, //零售价

sale:489700//特价

},

//历史价格

price_history:[

{retail:529700, sale:429700, start:new Date(2017,11,23), end:new Date(2017,12,21)},

{retail:529700, sale:529700, start:new Date(2017,10,21), end:new Date(2017,10,30)}

],

// 产品分类

category_ids:[

new ObjectId('5a05b1e6f156220da1caf69e')

],

main_cat_id: ObjectId(),

// 产品标签

tags:['tools', 'gardening', 'soil']

};

# 插入文档

> db.products.insert(doc);

# 设置索引

> db.products.ensureIndex({slug:1},{unique:true})

> db.getCollection('products').ensureIndex({slug:1},{unqiue:true})

根据分类中的产品

> db.products.find({category_ids=>category['id']});

Error: Line 1: Unexpected token =>

查看指定产品的所有分类

db.categories.find({_id:{$in:product['category_ids']}});

ReferenceError: product is not defined :

@(shell):1:26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值