[讨论] 《数据库设计规范》中 “3.1 结构原则”

pengdali 2003-06-08 11:36:00
原稿:
----------------------------------------------------------
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.1.18 ........

原应: .......
...全文
95 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
flflflfl 2003-09-19
  • 打赏
  • 举报
回复
flflflfl 2003-09-19
  • 打赏
  • 举报
回复
收藏
jackiedlh 2003-06-27
  • 打赏
  • 举报
回复
收藏
hjb111 2003-06-22
  • 打赏
  • 举报
回复
学习
nik_Amis 2003-06-22
  • 打赏
  • 举报
回复
up
sxzz 2003-06-22
  • 打赏
  • 举报
回复
我觉得在表的定义上还要讨论一下,有些表我觉得没必要要,如辅助编码表可以不要。
liuri璇玑 2003-06-09
  • 打赏
  • 举报
回复
关注与支持!
caiyunxia 2003-06-09
  • 打赏
  • 举报
回复
变量?
编程规范?
Jain123 2003-06-09
  • 打赏
  • 举报
回复
study
飞行石 2003-06-09
  • 打赏
  • 举报
回复
有点乱
coolkenmester 2003-06-09
  • 打赏
  • 举报
回复
3.1中的具体业务规则太多,是否考虑通用一点的,
业务过程不一定像文中所提(比如:红冲)
可否考虑另加章节:库存、生产等业务的命名
OpenVMS 2003-06-08
  • 打赏
  • 举报
回复
这是针对一个具体应用的,条例乱
sasacat 2003-06-08
  • 打赏
  • 举报
回复
估计没人敢跟贴了。。。偶看得眼睛花了,都不知道怎么提建议了
pengdali 2003-06-08
  • 打赏
  • 举报
回复
原稿:
http://expert.csdn.net/Expert/TopicView1.asp?id=1871600
minajo21 2003-06-08
  • 打赏
  • 举报
回复
我啊,mark
CSDNM 2003-06-08
  • 打赏
  • 举报
回复
这一段是好东东

可惜有点乱

在整理整理!?
nik_Amis 2003-06-08
  • 打赏
  • 举报
回复
up
BlueskyWide 2003-06-08
  • 打赏
  • 举报
回复
支持大力出书:《数据库设计规范》(大力著)。
愉快的登山者 2003-06-08
  • 打赏
  • 举报
回复
关注与支持!

a1n1 2003-06-08
  • 打赏
  • 举报
回复
好贴,学习
加载更多回复(1)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧