分布式数据库课程设计与实现——面向连锁超市管理系统的分布式数据库设计与实现内容摘要:
每个分店是一个相对独立的数据库服务系统,其可以连接任意数量的客户端。 通信模型如下图所示: 25 数据表的分片与位置分配设计 根据以上得到的关于主要信息数据的需求分析结果,为该连锁超市系统的分布式数据库系统进行主要信息数据的分片和分配设计如下: 数据的分片设计 ( 1)由于该连锁超市系统的各连锁店之间在经营上是独立的,每个门店只关心自己的 经营状况,有关供应商信息、 POS 机信息、商 26 品信息和进货 /销货信息等基础数据都是各门店单独管理和使用,门店之间互不相关。 因此,商品明细表、供应商表、 POS 机表、库存表、进货 /销售开单表、进货 /销售商品表、进货 /销售退货商品表按照地域(门店所在区域标志)采用水平分片的方法得到水平片段。 ( 2)这里我们对于商品信息进行了垂直分片,分成了商品明细表和库存表,因为商品的某些属性,例如库存量等需要经常更新,因此将这些属性划分出来构成单独的实体可以减少系统开销。 ( 3)由于整个连锁超市的职员信息由总公司管理和维护,各门店 只可以查询本店的职员信息。 所以职员信息不必分片,可以采用视图的形式提供给各门店查询本门店的职员信息。 另外,各个区域数据库服务器的 IP 地址信息也只是由总部管理、维护,所以也不必分片。 ( 4)由于商品分类数据由总部统一管理并提供各门店使用,而且,商品类别信息数据在各门店都要经常使用。 因此,商品类别信息数据也不必分片。 ( 5)该分布式数据库系统实现了简单的目录管理,记录数据库中各个表的分片和分配信息,以便数据更新时,维护各个站点上数据的一致性。 这个表由总部规划建立,各门店也会经常使用。 因此,数据库目录信息表也不必 分片。 数据及其片段的分配设计 ( 1)对于只在各门店单独使用的除商品类别信息和数据库目录信息以外的其他基础信息的片段,采用按区域分片然后分配到各个门店的数据库服务器上。 总站上有所有门店的所有信息。 27 ( 2)整个系统的职员信息、 IP 地址信息由公司总部管理和维护,所以只分配在总部站点中。 ( 3)商品类别信息、数据库目录信息是由总部统一规定并下发到各门店的,由于各店经常会使用到这类基础信息,因此在各门店都具有相同的副本。 所以,商品类别信息、数据库目录信息都不会分片但被复制,且复制的个数为门店的个数。 5. 基于 SQL 的 SMS 的详细设计(实现) 公共类设计 为了提高程序代码的开发效率,便于代码重用,在系统开发中,创建了一些数据操作类和控件扩展类。 文件操作类 CFileOperate 为了便于对硬盘文件的操作,开发了文件操作类 CFileOperate,它通过调用 API 函数实现常用的文件操作。 CFileOperate 类的声明代码如下。 extern CString strTmpPath。 class CFileOperate { public: //构造函数 CFileOperate()。 //取得当前 程序运行的路径 CString GetAppPath()。 //判断是否存在 strFn 文件夹 BOOL IsFileExist(CString strFn, BOOL bDir)。 //制作 strFloderName 文件夹返回文件夹名 CString MakeDirectory(CString strFloderName)。 //自动生成文件夹 28 CString MakeDirectory()。 //得到文件夹名为 strFloderName 的路径 CString GetDirectoryPath(CString strFloderName)。 //删除 strFloderdName 文件夹 void delDirectory(CString strFloderdName)。 //删除主文件夹 (data) void delMainDirectory()。 //制作主文件夹 void MakeMainDirectory()。 //判断 strIntDigit 是否为整数,是否小于 intBig BOOL CheckIntDigit(CString strIntDigit,int intBig)。 //判断 strFileName 是否可以做文件夹或文件的名字 BOOL CheckFileName(CString strFileName)。 //判断 strText 是否为空 BOOL CheckEmpty(CString strText)。 //删除 strFloderName 文件夹下名为 strFileName 的文件 void delFile(CString strFloderName,CString strFileName)。 //得到 strFloderName 文件夹下名为 strFileName 的文件路径 CString GetFileName(CString strFolderName,CString strFileName)。 //制作 strFloderName 文件夹下名为 strFileName 的文件 CString MakeFile(CString strFloderName,BOOL blnMake)。 //显示文件夹对话框 BOOL GetFolder(CString* strSelectedFolder,const char* lpszTitle,const HWND hwndOwner,const char* strRootFolder,const char* strStartFolder)。 系统程序中主要用到了 CFileOperate 类中的 GetAppPath 函数。 GetAppPath 函数用于获取当前运行程序所在文件夹的路径,其实现代码如下。 CString CFileOperate::GetAppPath()//取得当前运行程序所在文件夹路径 { char lpFileName[MAX_PATH]。 //路径数组 //获取当前运行程序的全路径 GetModuleFileName(AfxGetInstanceHandle(),lpFileName,MAX_PATH)。 CString strFileName = lpFileName。 //从字符串的最右边向左搜索 39。 \\39。 串 int nIndex = (39。 \\39。 )。 CString strPath。 if (nIndex 0) strPath = (nIndex)。 //取 39。 \\39。 串左边字符 else strPath =。 return strPath。 //返回前运行程序的文件夹路径 29 } 时间格式转换类 CMyTime 系统开发中,需要频繁的对日期、时间数据进行操作,因此这里设计了类 CMyTime,实现简单的时间日期转换, CMyTime 类的声明如下。 class CMyTime { public: CTime ValueTime。 //CTime 类型的值 //blnChinese:TRUE年月日时分秒 FALSE: CString GetAllString(BOOL blnChinese)。 //返回字符串形式的日期时间 //blnChinese:TRUE年月日 FALSE CString GetDateString(BOOL blnChinese)。 //返回字符串形式的日期 //blnChinese:TRUE时分秒 FALSE: CString GetTimeString(BOOL blnChinese)。 //返回字符串形式的时间 CString GetSimpleString()。 //返回简单字符串形式的日期时间 CString GetWeek()。 //返回星期 星期日 //设置字符串形式的值 //blnSimple:TRUE(%Y%m%d%H%M%S) FALSE(年月日时分秒或 :) void SetAllString(CString Value,BOOL blnSimple)。 void SetNow()。 //设置成现在时间 CMyTime()。 //构造函数 }。 SetNow 函数获取当前日期,时间,将其值赋予 ValueTime。 void CMyTime::SetNow() { ValueTime=CTime::GetCurrentTime()。 } 数据操作类 CADOConn 系统开发了数据操作类 CADOConn,它是本系统的核心,实现了对数据库数据的基本操作功能, CADOConn 类的声明代码如下。 import c:\program files\mon files\system\ado\ \ no_namespace rename (EOF, adoEOF) 30 class CADOConn { // 定义变量 public: _ConnectionPtr m_pConnection。 //指向 Connection 对象指针 : //添加一个指向 Recordset 对象的指针 : _RecordsetPtr m_pRecordset。 _bstr_t m_strData。 int m_DataType。 CADOConn(int DataType)。 //构造函数 CADOConn()。 virtual ~CADOConn()。 void OnInitCADOConn()。 //初始化连接数据库 _RecordsetPtramp。 GetRecordSet(CString strSQL)。 //执行查询 BOOL ExecuteSQL(CString strSQL)。 //执行 SQL 语句, Insert Update delete void ExitConnect()。 //退出连接 BOOL MoveFirst()。 //字段集移向开头 BOOL MoveNext()。 //字段集向下移 BOOL Open(CString strSQL)。 //打开记录集 BOOL OpenLogo(CString strSQL)。 //打开记录集 CString GetValueString(int index,int strSum)。 //返回记录集中某字段的字符串 byte GetValueByte(int index)。 //返回记录集中某字段的字节 int GetValueInt(int index)。 //返回记录集中某字段的短整数 double GetValueDouble(int index)。 //返回记录集中某字段的双精度数 float GetValueFloat(int index)。 //返回记录集中某字段的单精度数 long GetValueLong(int index)。 //返回记录集中某字段的长整型数 CTime GetValueDate(int index)。 //返回记录集中某字段的日期时间 //获取记录集某字段的 BYTE 值,并换为 CString返回 CString GetValueByteStr(int index,int strSum)。 //获取记录集某字段的 INT 值,并换为 CString返回 CString GetValueIntStr(int index,int strSum)。 //获取记录集某字段的 Double 值,并换 为 CString返回 CString GetValueDoubleStr(int index,int strLSum,int strRSum)。 //获取记录集某字段的 Float 值,并换为 CString返回 CString GetValueFloatStr(int index,int strLSum,int strRSum)。 //获取记录集某字段的 Long值,并换为 CString返回 CString GetValueLongStr(int index,int strSum)。 //获取记录集某 字段的 CTime 值,并换为 CString返回 CString GetValueDateStr(int index,CString strType)。 //添加单项数据 BOOL AddItem(CString strTable,int strSum,LPCTSTR pszText, ... )。 //得到字段中数据的类型 int GetValueType(int index)。 BOOL adoEOF()。 //记录集的结束判断 31 BOOL FillList(CListCtrl *listMain,int ColOpenEnd)。 //填充列表 (ColOpenEnd 代表展开多少列 ) BOOL InitList(CListCtrl *listMain,int colSum)。 //初始化列表 CString GetAppPath()。 //得到应用程序所在的文件夹 BOOL FillList(。分布式数据库课程设计与实现——面向连锁超市管理系统的分布式数据库设计与实现
相关推荐
以上国家及省级文件说明,对于农民工创业需要予以支持,而支持的最有效方式,就是建立农民工创业园,为他们创业搭建好平台。 、产业政策分析 ●国家十一五规划提出建设社会主义新农村,并提出:推动乡镇企业机制创新和结构调整,引导乡镇企业向有条件的小城镇和县城集中。 扶持县域经济发展,注重发展就业容量大的劳动密集型产业和服务业,壮大县域经济。 健全就业信息服务体系,引导富余劳动力向非农产业和城镇有序转移。
一般采用大理石或高级玻化砖窗台采用大理石板墙面采用高级壁纸天棚装饰采用轻钢龙骨石膏面板和金饰板木线条装饰造型灯饰采用不同风格的成套艺术灯使灯光将展厅衬托出不同风格的情调 ●多功能厅
m2,其他建筑面积。 项目建成后,将形成一个布局合理、配套齐全、功能完善的现代化居住小区。 二、方案设计 规划依据 ⑴《中华人民共和国城市规划法》 ⑵《寿光城市总体规划》( 20202020) ⑶《寿光城市风貌规划》 ⑷《潍坊市城市规划标准》 ⑸《城市规划编制办法》及有关定额指标 ⑹《城市居住区规划设计规范》 ⑺中华人民共和国现行的有关法律、法规、技术规定 ⑻甲方提供的规划设计条件和设计要求。
来执行分组过滤。 良好的网络安全在实现的同时,也应该使内部用户难以妨害 5 网络安全,但这通常不是网络安全工作的重点。 网络安 全策略的一个主要目标是向用户 提供透明的网络服务机制。 由于分组过滤执行在 0SI 模型的网络层和传输层,而不是在 应用层,所以这种途径通常比防火墙产品提供更强的透明性。 当前 , 几 乎所有的分组过滤装置都按下面方式进行操作 :
因此我们参考厦门钨业的相关数据估算 APT 的冶炼成本; ( 2) 辅业 – 辅业公司的盈利比较稳定,按照其 2020- 2020 年平均的盈利水平推算; 融资及监 管体制资本运作预算管理办法发展及政策研究市场分析方案建议摘要报告培训管理制度人员招聘表格内部访谈 融资及监管体制资本运作预算管理办法发展及政策研究市场分析方案建议摘要报告培训管理制度人员招聘表格内部访谈 ( 3) 母公司盈利包括 –
化工等行业的高速增长将使得我国的钨消费特别是在硬质合金领域的消费继续保持较快增长的态势。 未来 10年中国钨的需求增长率预计在 %左右, 2020年国内钨的需求量将达到 11450吨, 2020 年将达到 12200 吨。 ( 3) 钨的主要应用领域及发展趋势 从目前全球的应用情况来看,硬质合金是最主要的应用领域,如图 4 所示。 与世界钨的消费结构相比,中国的钨产业结构相对失调