cc

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  38 随笔 :: 14 文章 :: 21 评论 :: 0 Trackbacks
标题:数据库设计规范   
    
  版本:V2.0  
   
  修订文档历史记录:  
  ---日期--|---版本--|--说明----  
  2003.6.5       V1.0             文档初搞  
  2003.6.17     V2.0             对1.0   的内容重新整理  
   
   
   
                                                          数据库设计规范  
  1     目的  
   
        规范数据库设计。  
   
  2     概述  
   
        从数据库的设计原则     设计文档几方面论述数据库设计的规范思想及命名规则。  
   
  3     数据库应用结构  
         
        根据对一般业务系统的分析,将数据库和程序系统统一进行整体描述,展示数据库的  
   
  表之间以及与程序模块间的关系。  
   
        3.1 数据表和程序模块的分类  
   
        根据“处理特点”,将数据表和程序模块进行分类如下:  
   
        数据表分类:业务数据表、基本编码表、辅助编码表、系统信息表、累计数据表、结  
   
  算数据表、决策数据表。  
        程序模块分类:初始化、业务处理、完整性检测与修正、结算处理、统计处理。  
           
                3.1.1   数据表分类说明  
         
        业务数据表:记录业务发生的过程和结果。如,合同、出仓单、申请单、凭证。  
        基本编码表:描述业务实体的基本信息和编码。如,产品、客户、供应商、雇员。  
        辅助编码表:描述属性的列表值。如,合同类型、职称、民族、付款方式。  
        系统信息表:存放与系统操作、业务控制有关的参数。如,用户信息、权限、用户配  
   
  置信息、成本核算方式。  
        累计数据表:存放业务的当前值和累计值。如,当前库存、当前存款、累计销售、累  
   
  计支出、应收账款。  
        结算数据表:存放各个时期末的结存数。如,月末库存、月末银行存款、应收账款月  
   
  结。  
        决策数据表:存放各个时期内发生的统计值。如,月销售统计、月回款统计、出入库  
   
  统计。  
   
                3.1.2   程序模块分类说明  
   
        初始化:系统运行前对系统进行数据的初始化。如,库存初始化。  
        业务处理:业务过程的控制和结果记录。如,合同录入、费用审批、出入库。  
        完整性检测与修正:对累计数据表进行检查并自动修正。如对当前库存、当前存款、  
   
  累计销售的检查和重新计算。  
        结算处理:计算并记录各个时期末的结存数。库存月结、应收账款月结。  
        统计处理:计算并记录各个时期内发生的统计数。如,统计月销售、统计月回款、统  
   
  计出入库。  
   
        3.2   数据表间的关系  
   
        业务数据表<-->基本编码表   主-外键关系。如,合同表<-->客户编码表;  
        业务数据表<-->辅助编码表   主-外键关系。如,合同表<-->付款方式;  
        业务数据表、累计数据表、结算数据表:累计数据表=结算数据表(上期末)   +   业务数  
   
  据表(本期内发生)。如当前库存=上月末库存数+(本月入库数-本月出库数);  
        决策数据表<-->业务数据表   决策数据表的数据是由业务数据表中数据导出(统计)的;  
   
        3.3   数据表与程序模块间的关系  
               
        由一个例子(仓库管理)来说明数据表与程序模块之间的关系:  
        .   系统使用前,由初始化模块对库存数(累计数据表)和上月末库存数(结存数据表)进  
   
  行初始化;  
        .   当有入库业务发生时,由入库模块(业务处理)将入库单录入并保存到入库单明细帐(  
   
  业务数据表)中,同时将入库数累加到库存数(累计数据表)中;  
        .   定期或不定期,库存数核算模块(检查完整性检测与修正)根据上月末的库存数(结存  
   
  数据表)、本月已发生数(业务数据表)检查当前的库存数(累计数据表)是否符合,不符合  
   
  则给出提示,可手工或自动进行更正(当前库存数=上月末库存数+本月入库数-本月出库数  
   
  );  
        .   每月初,进行上月的月结处理。月结模块(结算处理)根据上月初的库存数(结存数据  
   
  表)、上月发生数(业务数据表)计算出上月末的库存数(累计数据表)。公式为:上月末库  
   
  存数=上月初库存数+上月入库数-上月出库数;  
        .   每个月月结后,库存业务月统计模块(统计处理)统计上月的各种库存商品的入库和  
   
  出库数,便于查询和生成报表,也作为决策支持的数据基础。  
   
        3.4   数据表命名时对数据表分类的考虑  
   
        .   业务数据表:t_d_<系统标识>_<表标识>。如销售系统的合同表   t_d_SH_Contract    
   
  或   t_d_SH_合同;  
        .   基本编码表:t_b_[<系统标识>]_<表标识>。如客户编码表t_b_Customer   或   t_b_客  
   
  户;  
        .   辅助编码表:t_a_[<系统标识>]_<表标识>。如合同类别t_a_ContType   或   t_a_合同  
   
  类别;  
        .   系统信息表:t_s_[<系统标识>]_<表标识>。如用户表t_s_User   或   t_s_用户;  
        .   累计数据表:t_t_<系统标识>_<表标识>。如当前库存表t_t_SO_Stock   或   t_t_SO_  
   
  库存;  
        .   结算数据表:t_c_<系统标识>_<表标识>。如库存月结表t_c_SO_StockMonth   或    
   
  t_c_SO_库存月结;  
        .   决策数据表:t_w_<系统标识>_<表标识>。如月销售统计表t_w_SH_SellMonth   或    
   
  t_w_SH_月销售统计;  
           
        注:[]内的内容表示可选。如“t_s_[<系统标识>]_<表标识>”表示t_s_SH_User   和    
   
  t_s_User   都是符合规则的。  
   
  4     数据库结构原则  
         
        规定除数据库设计所遵循的范式外的一些适用原则,在遵循数据库设计范式的基础上  
   
  ,合理地划分表,添加状态和控制字段等。  
   
        4.1 辅助编码表  
   
        为了使辅助编码表能起到预期的效能,又不因过多的辅助编码表难以管理,故对辅助  
   
  编码表的使用作如下规定:  
   
        1.   当某辅助编码表的编码允许用户添加时,应设计成“独立”的数据表;否则,将不  
   
  允许用户添加编码的各辅助编码表合并成一个“通用”的辅助编码表。  
        2.   “独立”的辅助编码表与主表的列采用主-外约束保证列数据完整性。  
        3.   “通用”的辅助编码表与各主表间没有约束关系,主表列的数据完整性由列说明的  
   
  “域”来保证。  
        4.   “通用”的辅助编码表除编码和名称列外,还有一个标识列,用来标识合并前的各  
   
  码表,该标识列+编码列作为该表的主键。  
        5.   对于“独立”的辅助编码表,用户只可添加新的编码和改变名称,并且不能改变一  
   
  个编码所代表的意义;对于“通用”的辅助编码表,原则上不允许用户修改,或只有限地  
   
  允许修改名称。  
         
        4.2 基本编码表  
   
        1.   基本编码表可以有如下的标识列:内编码、外编码、助记码、简称、全称。内编码  
   
  (唯一编码)作为主键有程序自动生成,用户不可见;外编码(唯一编码)由用户按某种  
   
  规则自行定义,用户可见;助记码为拼音缩,方便录入,不唯一,重码时由列表选择;简  
   
  称用于列表显示和报表,以便缩短行宽。以上的列在实现时可视情况和习惯加以删减。  
        2.   当码表的列较多且也行较多时,可将上述的标识列和常用的信息存于一个表,将其  
   
  它的信息另表存储。  
   
        4.3 业务数据表  
   
        1.   设有‘录入人’和‘录入日期’列,由系统自动记录。  
        2.   记录单据的表中设置“自动单据号”,由两个字符开始以区分单据类型,后跟一数  
   
  字序列表示序号。‘自动单据号’由系统自动生成,作为主表的主键,不允许用户修改。  
   
  当有对应的纸质单据时,设置“单据号”用于记录纸质单据的单据号。  
        3.   明细表中设有行序号,自动记录行的录入顺序。  
        4.   设置“存档标记”列,用于抽取数据到决策数据库时的更新标记。插入新行或修改  
   
  已有行时设置该标记;数据抽取后清除该标记。  
        5.   对于用于查询过滤条件的列,不可为空,以免行“丢失”。  
        6.   对于数值列,不可为空,“0”作为默认值。  
        7.   对于必要的“冗余”列,如客户名称,应有相应的程序保持各“冗余”列的同一性  
   
  ,以免出现异议。  
        8.   设置“过程状态”列和“记录状态”列。过程状态列用于记录如创建、审核、记账  
   
  、冲红等状态;记录状态用于记录如有效、删除等状态。  
         
  5     数据库命名原则  
   
        5.1   表名  
   
        .   业务数据表:t_d_<系统标识>_<表标识>。  
        .   基本编码表:t_b_[<系统标识>]_<表标识>。  
        .   辅助编码表:t_a_[<系统标识>]_<表标识>。  
        .   系统信息表:t_s_[<系统标识>]_<表标识>。  
        .   累计数据表:t_t_<系统标识>_<表标识>。  
        .   结算数据表:t_c_<系统标识>_<表标识>。  
        .   决策数据表:t_w_<系统标识>_<表标识>。  
   
        5.2   视图  
   
        v_<视图类型>_[<系统标识>]_<视图标识>。视图类型参见《表的分类》。  
   
        5.3   存储过程  
   
        p_[<系统标识>]_<存储过程标识>  
   
        5.4   函数  
   
        f_[<系统标识>]_<函数标识>  
   
        5.5   触发器  
   
        tr_<表名>_<i,u,d的任意组合>     (after)  
        ti_<表名>_<i,u,d的任意组合>     (instead)  
   
        5.6   自定义数据类型  
   
        ud_<自定义数据类型标识>_<数据类型>  
   
        5.7   Default  
   
        df_<Default标识>  
   
        5.8   Rule  
   
        ru_<Rule标识>  
   
        5.9   主键  
   
        pk_<表名>_<主键标识>  
   
        5.10   外键  
   
        fk_<表名>_<主表名>_<外键标识>  
   
   
  附:  
   
  为了描述第一部分清楚,请下载浏览   《数据表分类描述图》  
   
  visio格式  
  http://218.242.185.84/bbs/update/20036/20221827CSDN.vsd  
   
   
  图片格式  
  http://218.242.185.84/bbs/update/20036/20222035CSDN.jpg  
posted on 2009-10-29 20:44 醒目西西 阅读(271) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理