您的位置:首页 > 数据库

基于dragonboard 410c的智能魔镜设计(2)——数据库设计与实现

2016-12-29 14:33 871 查看
          本篇blog将在http://blog.csdn.net/andymfc/article/details/53926845整体方案的基础上,完成对基于dragonboard 410c的智能魔镜的数据库的设计,首先我们根据方案分析,可以知道,在智能魔镜上需要保持用户信息、保持消息信息,因此,基本可以构建一个用户表userInfo和一个消息表pushInfo两个表就可以对整个智能魔镜的数据进行管理,可以方便的调用和存储相关的数据,具体的数据库设计方案如下:

          


           上述两个表中,userInfo表用于存储系统中的用户信息,主要包括ownerID, 用户ID,Name,用户名,password 用户密码,保存的是MD5密码摘要信息,email,用户邮箱、phone 用户手机、haarValue,用户脸部特征值,pushInfo表为推送消息表,系统中所有的推送消息都被保存在该表中,其中infoID为消息的ID,ownerID为消息的拥有者的ID,表示这条消息是属于哪个用户的,系统将在后续根据这个值将消息推送给该用户,pushID,推送者,表示这条消息是由哪个用户推送过来的,系统根据该值识别推送消息的用户,infoType,消息类型,该值为0或者1
,位0的时候表示是普通的文本消息,填写infoSubject和infoContent两个项目即可,为1的时候为视频或者音频消息,此时视频文件路径将被保存到filePath字段中,pushTime,表示推送的时间,infoValidityTIme表示的是消息的有效期,istop表示消息是否置顶,如果该值为1表示消息置顶,将优先推送该消息,viewWeight表示消息的显示权值,显示完的消息权值将减少为0不再显示。
           基于上述设计,本文使用python sqlite3 接口完成了创建该数据库的编码,具体代码如下:
 import sqlite3

import os.path

import random

import time

#MagicMirrorDB = sqlite3.connect("./MaigicMirrorDB.db")

#MagicMirrorDB.execute("")

#create userInfo

class MagicMirrorDB:

    def __init__(self,dbPath):

        self.DB=sqlite3.connect(dbPath)

        self.cu=self.DB.cursor()

        self.DB.execute("")

        #self.initTable()

        #self.insertTestData(5,20)

    def initTable(self):

        try:

            #create userInfo table

            self.DB.execute("create table userInfo(userID integer primary key autoincrement,\

                                name nvarchar(50),\
             password nvarchar(20),\

                                email nvarchar(50),\
       phone nvarchar(50),\

                                haarValue nvarchar(50),\

                                avatarImg nvarchar(50))"

                                )

           #create pushInfo table

           #********************pushInfo table**********************#

           # infoType  0 text info, 1 video info 

           # 

            self.DB.execute("create table pushInfo(infoID integer primary key autoincrement,\

                                ownerID integer,\

                                pushID integer,\

                                infoType integer,\

                                infoSubject nvarchar(50),\

                                infoContent nvarchar(100),\

                                filePath nvarchar(1000),\

                                pushTime float,\

                                infoValidityTime float,\

                                isTop integer,\

                                viewWeight integer\

                           )")

           # self.DB.execute("create table systemStatus(statusName nvarchar(30),statusValue integer,statusParam integer ,statusDiscirption nvarchar(50))")  

                               

        except:

            print("table is already create")
     在上述代码中,我们就可以通过在主函数中构建该类,完成对数据库的初始化,创建系统数据库,具体如下:
     if __name__=="__main__":

    import sys

    MMDB=MagicMirrorDB("./MagicMirrorDB.db")

    print(MMDB.getUserAvatarImg(1))

    result=MMDB.getUserVideoMessageList(1)

    print(result)

    result2=MMDB.getTextMessageList(1)

    print(result2)

    sys.exit(0)    
    这样,在设计其他模块之前,我们就可以运行该脚本,完成数据库的创建,创建后,可以通过执行sqlite3命令查看数据库设计是否正确。
    同样为了方便测试,在这里还构建了一个自动生成测试数据的函数,具体如下,通过执行该函数可以快速的生成测试信息填充数据库,就可以在后续设计模块的过程中利用这些数据进行测试。
    def insertTestData(self,userInfo_n,pushInfo_n):

        for userID in range(1,userInfo_n):

            format="test%u"

            values=(userID)

            userName=format % values

            format="password_test%u"

            password=format % values

            format="email_test%uqq.com"

            userEmail=format % values

            format="phone_test%u"

            userPhone=format % values

            format="haarValue_test%u"

            haarValues=format % values

            avatar=(random.randint(1,8))

            format="./avatarImg/headImg/ali1/%u.gif"

            avatarImg=format % avatar

            format="insert into userInfo values(%u,'%s','%s','%s','%s','%s','%s')"

            values=(userID,userName,password,userEmail,userPhone,haarValues,avatarImg)

            insertSQL=format % values

            #print(insertSQL)

            self.cu.execute(insertSQL)

        for infoID in range(1,pushInfo_n):

            ownerID=random.randint(1,userInfo_n)

            pushID=random.randint(1,userInfo_n)

            infoType=random.randint(0,1)

            isTop=random.randint(0,1)

            viewWeight=random.randint(1,8)

            format = "infoSubject_pID:%u_wID:%u"

            values=(pushID,ownerID)

            infoSubject=format % values

            format = "infoContent_pID:%u_wID:%u"

            values=(pushID,ownerID)

            infoContent=format % values

            filePath=""

            if infoType==1:

                format="./messageFile/ownerID%u/pushID%u_%u.mp4"

                values=(ownerID,pushID,infoID)

                filePath=format % values

            else:

                filePath="None"

            pushTime=time.time()

            format="insert into pushInfo values(%u,%u,%u,%u,'%s','%s','%s',%f,1.0,%u,%u)"

            values=(infoID,ownerID,pushID,infoType,infoSubject,infoContent,filePath,pushTime,isTop,viewWeight)

            insertSQL=format % values

            #print(insertSQL)

            self.DB.execute(insertSQL)

            以上就是整个智能魔镜的数据库的设计,后续将在该数据库的基础上,进一步完成和完善其他功能模块的设计。
       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐