本次数据库并没有采用传统的sql数据库,而是选择了目前比较火热的Nosql数据库,这次使用的产品是其中的佼佼者MongoDB
MongoDB配合python本身方便的list() dict() set()类型的STL 极大的方便了开发
并且国外很多家网站已经用数据验证了MongoDB的可靠性,在面对大数据处理时,其Bson的数据存储方式可以方便的进行
数据库分片,查询的MapReduce以及数据挖掘
并且,由于其本身特性可以不满足一范式条件,所以sql数据库需要很麻烦的部分MongoDB都可以轻松解决
数据库设计
数据库:
文档集 类似于sql数据库中的表
users
user = {
# '_id':None,
'username':username,
'password':str(uuid.uuid5(config.PASSWORD_NAME_SPACE,str(password))),
'email':email,
'basket':[],
'orders':[]
}
books
book = {
# '_id':None,
'title':title,
'author':author,
'publishers':publishers,
'cover':cover,
'price':price,
'language':language,
'classification':classification,
'isbn':isbn,
'description':description,
'inventory':inventory,
}
在取得db对象后可一很轻松的获取内容
con = pymongo.Connection("localhost", 27017)
db = self.con.bookstore
合理性解释如下:
在user表中 出了username
password
email
三个选项之外
还有两个列表 basket和 orders
分别代表用户的购物车和订单
用户加入购物车后会在该列表里加入book的_id
,用于索引全部购物车书籍
每次用户支付完成后,会将basket清空,并在oreders增加一个列表记录用于保存本次购买的信息
注:关于题目中要求的“购物车只在一台电脑上保存” 这样的实现方式更加简单,甚至用不到数据库,将
购物车中每本书的_id写入cookies中更简单,或者简单的增加一层redis的缓存既可以实现,但目前主流购物网站
的购物车都是可以云端同步的,所以采用了在数据库中增加条目的设计