数据库设计规范

1 目的

规范数据库设计。



2 概述

从数据库的设计原则 设计文档几方面论述数据库设计的规范思想及命名规则。


 
3 数据库设计原则

3.1 结构原则

3.1.1 与程序流程有关的状态信息使用域进行限制和定义,不允许最终用户修改定义



3.1.2 用户可修改的状态列表信息,用数据表来定义,一经创建后,用户只可修改名称,不能修改代码,修改后的名称与原名称应代表相同的意义。



3.1.3 用户采用列表录入的文字信息,在一个统一的‘系统信息’表中定义,用户可任意创建和修改。用此种方法录入的信息,录入的信息与选择列表不存在约束关系,列表只是作为文字录入的一种辅助手段。



3.1.4 辅助编码表应至少有两列—代码和名称。只有在名称非常稳定的情况下才可以不使用代码。使用编码表的好处是在应用程序界面中,不同的地方出现同一种数据的录入(如录入数据或查询过滤条件)时只需定义一次选择列表,不会出现两处冲突的现象,方便编程。



3.1.5 所有记录业务数据的表中都设有‘录入员’和‘录入日期’列,由系统自动记录。



3.1.6 记录业务数据的表中,根据需要设置‘过程’和‘状态’列,‘过程’列用一位数字或字符记录如录入 审核 记账等过程状态;‘状态’列用一位数字或字符记录如正常 作废 删除等状态。所有表的‘过程’状态的改变日期和操作人由一单独表来记录,表中记录状态改变所涉及的表标识 记录标识 操作人和操作日期。



3.1.7 基本编码表中应设置‘编码’ ‘缩语’ ‘名称’,‘编码’作为主键与其它表的外键形成对应关系,完成基于主-外键的完整性约束。



3.1.8 记录录入单据的表中设置‘自动单据号’,由一字符开始以区分单据类型,后跟一数字序列表示序号。‘自动单据号’由系统自动生成,作为主表的主键,不允许用户修改,并作为连接主表和明细表的外键。



3.1.9 明细表中设置序号列,用于同一单据中排列各行的序号。



3.1.10 用于记录业务数据的数据表与用于报表的数据表分别存于不同的数据库中,分别命名为‘业务数据库’和‘决策数据库’。‘业务数据库’独立于‘决策数据库’进行设计,‘决策数据库’中的数据来源于‘业务数据库’。



3.1.11 任意业务流程中应考虑创建 审核 记账 修改 删除 冲红 结存(月结 年结)的处理及满足的条件。



3.1.12 对于主-明细表结构,设计对应的视图将两表连接用于查询。



3.1.13 禁止直接用编码或名称列表(in)作为固定的过滤条件对数据进行查询。应将包含此过滤条件的查询做成特定的视图;或在编码表中加入一属性字段用于分类。



3.1.14 对于业务数据表应设定一个‘存档标记列’,对于新增行或修改行设置该标志,以便将业务数据库中的数据向决策数据库复制时用以选择需更新的数据。当采用数据库复制技术时,也希望设定此标志,以备用。此标志的设置可以由应用程序或触发器来执行。



3.1.15 决策数据库中应复制基本编码表和辅助编码表,以保持决策数据库数据的完整性。



3.1.16 同时采用多种分类方法:如果某一实体有多于一种的分类方法,或实体中的每个实例所属的类的数量是不定的,这时实体表和分类表之间的关联是多对多的,即一个实体属于一个分类而同时也属于其它的分类。对于具有可多选的分类标志的表,与分类名称列表之间存在多对多的关系,须按多对多的关系来处理。
--实体表-- --实体-分类表-- --分类表--
实例1 实例 分类 分类1->类别1.1
实例2 1对N ... 1对N 分类1->类别1.2
实例3 ... 分类2->类别2.1



3.1.17 业务过程的记录:如果一个业务表(或主表+明细表)依赖另外一个业务表的数据,或在流程上一个业务表根据另一个业务表生成,则该业务表中应有一字段记录另一业务表对应记录的标识。这样的结构使得在流程上的所有数据形成一个链。他有两个作用:其一,可以追述某一过程进行到哪一步;其二,对于流程的回退有用,当流程需要回退到某一步时,将该步骤生成的记录作废,同时作废由此记录生成的所有后续记录,即可以回退到流程的任意一点。由于数据的依赖关系,回退时实际上是从后向前作废记录,直到希望回退到的位置为止。
一个业务流程应作为一个事务(在数据库管理系统中的定义),要保证这一事务的完整性。首先一个事务要有一个标识,在这个事务进行过程中所产生的一切数据都应打上事务标识作为标记。可以‘回滚’整个事务,或‘回滚’(从后向前)到事务进行的某一点上,然后再继续进行直到完成事务。



3.1.18 分类字段的冗余:业务数据表往往关联许多的基本信息表,这些基本信息表中可能含有一些分类字段,而业务数据表的分类统计可能引用这些字段。如果这些分类字段的内容会改变,而又不希望这种改变影响业务数据的统计结果,则在这些业务数据表中应包含这些分类字段,用以记录业务发生时该字段的内容。



3.1.19 类别和状态的多选:多选分为必选(1..n)和可选(0..n)。如是必选,在设计时要有说明,在程序实现中应有控制和检查。两个可选的类别或状态表可以合并为一个表,再与引用此表的主表形成多对多的关系



3.1.20 财务记账的处理:由凭证生成各种帐目(总帐 明细帐 日记帐 部门帐 往来帐 项目帐以及备查帐)时,有两种处理方法:一种是各账本不生成表,需要时临时生成,在月结时一次生成月结帐;另一方法是生成表,当对凭证进行修改时,先做删除处理(可用数据库的级联删除功能),再补新凭证然后记帐,或,先做作废处理(各账目中与凭证相关的记录由凭证号关联),再补新凭证然后记帐。当各账本与凭证之间由凭证号关联时,可进行关联查找。



3.2 命名原则

3.2.1 表和视图命名原则
系统信息表:TS_
基本编码表:TB_
决策数据表:TD_
业务数据表:不同的业务以不同的缩写(2-3个字符)开始,如‘TCRM_’;如是辅助编码表则在代表业务的缩写后加A_,如‘TCRM_A_’。
关联数据表:TRE__表A_表B
视图:在表命名的基础上加前缀改为V_
后缀:主-明细结构的表,主表为 _M;明细表为 _L
单词首写字母要大写,多个单词间不用任何连接符号如:TCRM_UserType
注意:尽量写好列“描述”



3.2.2 列命名规则
第一个字母小写,后面的单词或拼音,采用第一个字母大写,命名规则只来自于业务,尽量表达出列的含义



3.2.3 过程、函数、触发器命名原则
过程:SP_
函数:FN_
触发器:TR_表名_[后面插入加I,修改加U,删除加D],操作前触发器(INSTEAD OF): TR_表名_OF[后面插入加I,修改加U,删除加D]



3.2.4 自定义数据类型、默认、规则命名原则
自定义数据类型:UD_
默认: DF_,对于非绑定的默认可取系统默认的名字
规则:RU_,对于非绑定规则(约束) 可取系统默认的名字



3.2.5 主键、外键关系、索引命名原则
主键: PK_表名
外键关系:FK_主表_从表
索引:ID_列名,符合索引列名间用_隔开


 

posted @ 2008-01-19 16:36  所言非虚  阅读(819)  评论(0编辑  收藏  举报