`
lxy2330
  • 浏览: 468441 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库表设计细节

阅读更多


数据库建表原则

数据库表及字段命名、设计规范

SQL优化-索引

一  有关表字段设置(以oracle为例)

对于任何字段长度都不应该过于小气,否则未知的变化会造成前后台都要修改  
                     
1、对于开关型字段建议number(1,0) 而不是varchar2(1),避免用户错误保存Y/N,而不是1/0,这样可能会引入大小写问题 (同意)
                                  
2、对于数据字典编码字段,不要小气的确定为3位,最好统一为32位
经验证明,有时受从其它系统数据接入的影响,由于没有对照项,会直接保存原始值,而原始值一般都5-10位
统一为32位的好处是,可以考虑利用GUID来生成数据字典编码,这样在数据合并时非常有优势. (很同意)
                          
3、对于一般性录入字段,如:编号,轴号,车号,不要为了一时的"绝对"而设置确定的长度,最好统一成较优的长度,如32位!  
      如:车号最早是6位,没多久就改成了7位! 轴号开始为8位,但实际上有15位的轴号!轴承编号由10改为了20位  
                                    
4、对于类似名称的字段: 如单位名称, 数据字典项目的名称等,最好再大一些,设成60位!  
              
5、对于备注类型的字段,一般内容在30个汉字左右,所以推荐设置为100  
              
6、对于长文本的字段,一般内容在200个汉字左右,推荐设置为1000  
                    
7、对保存SQL语句的字段(特殊情况,如配置传输条件等),至少要设置为2000,最大是4000  
                                      
8、对于数字字段,除非精度要求,统一为number是个较好的选择 (如果需要,请尽量提前考虑好精度可能的变化)
number默认精度为15位(整数位数+小数位数=15位,小数点位置任意),其它大数值也可以保存,但是采用的是科学计数法,有精度损失  
      用number,不指定精度的最大的好处是不限制数值的精度和范围  
       如果指定number(2,1),则存入的数值范围在-9.9 至 9.9之间,如果用户提出精度调整为2位,则需要修改数据库和程序!  
                            
9、对于日期型的就没有什么说法了 

二  选择键和索引的原则

1 键选择原则:

1) 键设计4 原则
为关联字段创建外键。   
所有的键都必须唯一。   
避免使用复合键。   
外键总是关联唯一的键字段。
  
2) 使用系统生成的主键

设计数据库的时候采用系统生成的键作为主键,那么实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。
采用系统生成键作为主键还有一个优点:当拥有一致的键结构时, 找到逻辑缺陷很容易。

3) 不要用用户的键(不让主键具有可更新性)
在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。

4) 可选键有时可做主键
把可选键进一步用做主键,可以拥有建立强大索引的能力。

2 索引使用原则:

  索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。
  1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。

  2) 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。

  3) 不要索引memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。

  4) 不要索引常用的小型表
  不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。

三 其它设计规范

(1)所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、 binary、sql_variant、binary 、varbinary外,必须有默认值。
字符型的默认值为一个空字符值串’’;数值型的默认值为数值0;逻辑型的默认值为数值0;其中:系统中所有逻辑型中数值0表示为“假”;数值1表示为“真”。datetime、smalldatetime类型的字段没有默认值,必须为NULL。

(2)当字段定义为字符串形时建议使用varchar而不用 nvarchar。

(3)表内不应该存储依赖于其他键的非键信息

四 数据库表设计中的经验

表是Oracle数据库中最基本的对象之一。万丈高楼从平地起,这个基础对象对于数据库来说,非常重要。因为其设计是否合理,直接跟数据库的性能相关。从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与管理上,或多或少,会犯一些错误。笔者今天就谈谈自己在这方面的经验与教训,或许能够给大家一些警示作用。

经验一:在设计大型数据库时,把允许NULL的列放在表的后面。

在数据库表设计过程中,有些字段要求必须为非空,如表的关键字,单据编号字段等等。在数据库表创建的时候,往往需要把这些字段设置为非空。如此的话,就可以强制用户输入数据,以增强数据的一致性。

同时,在一张表中,也会有不少的字段,如员工信息表中,员工爱好、注释等字段,就可能允许为空。利用数据库专业术语来说,这些没有内容的字段就是“NULL”字段。

在数据库表设计的时候,对于这种类型的空字段要特别的留意。一方面,这个NULL字段,不是说其里面存储的是空格。若利用“’’”这个符号去查询空字段的记录的话,往往查不到我们想要的结果。因为在数据库存储的时候,若字段为NULL,则这个值根本没有存储。另一方面,正因为上面这种特性,所以,在表设计的时候,最好把允许NULL的字段放在表的末尾,当数据库比较大或者空字段比较多的话,则可以大大的减少数据库的存储空间。

另外,在数据库创建表的时候,是按照列建立的时间来排序的。所以,当某个列建立好之后,除非重新删除再建立,否则无法调整列的顺序。这就要求数据库管理员在创建表之前,就要对列、以及是否为空有一个明确的定义。只有如此,才能够合理安排列的顺序。

经验二:养成勤于写注释的习惯。

判断一个人是否是数据库专家,从一个“注释”的小习惯中就可以 看得出来。若一个人在数据库开发的时候,勤与写注释,如在建立表或者字段的时候,能够利用comment命令对表与字段进行注释,则可以从一定程度上判断他是这方面的行家。相反,若其开发的数据库,注释没有多少,则基本可以判断,他是一个刚入门的菜鸟。或者说,其没有参加过大型数据库的设计。

这主要是因为,在数据库开发过程中,往往不是一个人可以完成的。如在开发一个ERP数据库的时候,可能有些人专门负责开发基础表,而有些人负责维护视图,等等。大家都是分工合作。同时,在前台也有程序员需要调用后台的数据库表与字段。所以,中大型的数据库与应用系统往往是大家协作的结果。

为此,为了提高表与字段的可读性,一个数据库管理人员开发的表格,大家都可以看的懂,就需要给表与字段设置比较详尽的注释。在Oracle数据库中,为了给其他伙伴提供有意义的帮助信息,就可以利用Comment命令来描述表、字段的作用以及一些引用的注意事项。这个小小的命令,可以大大提高表与字段的可读性,提高数据库与程序开发团队的协作性。

分享到:
评论

相关推荐

    discuz 论坛数据库表结构

    Discuz 论坛数据库表结构是学习数据库设计的良好示例,在这里我们将详细介绍 Discuz 论坛数据库表结构的设计理念和实现细节。 首先,让我们来了解 Discuz 论坛数据库表结构的整体架构。Discuz 论坛数据库表结构共有...

    支付交易平台数据库设计文档

    最后,数据库设计文档应详细记录每个表的字段说明、数据类型、约束条件、索引设计、触发器、存储过程等数据库对象的创建细节。这些内容都是数据库设计的关键组成部分,关系到数据库的整体性能、安全性和易用性。设计...

    数据库系统设计综合实验

    3. **数据库设计**:解释实体关系模型,包括各个表的设计、字段选择、键的定义以及可能的约束。 4. **程序实现**:列出主要的C#类和方法,说明如何使用ADO.NET进行数据操作。 5. **界面设计**:展示GUI的设计,包括...

    SQL 数据库设计物理文档

    物理数据库设计是逻辑设计的具体实现,它涉及到数据库在物理设备上的存储方式、文件组织、索引选择等细节,直接影响到数据库的性能和维护。SQL Server 2005作为一款成熟的关系型数据库管理系统,在考斯特物流公司的...

    金碟数据库表结构说明

    这些表的字段设计需要考虑到业务流程的各个细节,确保数据的完整性和准确性。 在“商业”文件中,很可能是对商业数据库表的详细分析。商业数据库表通常涵盖销售、市场、客户关系管理等方面的数据。例如,销售订单表...

    自动生成数据库表结构word文档的工具

    本文将详细介绍一款名为"good数据库表结构设计文档生成工具"的实用软件,它可以帮助开发者自动生成数据库表结构的Word文档,大大简化了数据库文档的编写过程。 首先,这款工具依赖于微软的.NET Framework 4.0运行...

    需求分析+概要设计+详细设计+数据库设计模板

    在软件开发过程中,需求分析、概要设计、详细设计以及数据库设计是四个至关重要的阶段,它们构成了项目开发的基础。下面将分别对这四个阶段进行详细阐述。 **需求分析**是软件开发的第一步,主要目标是明确和理解...

    停车场管理系统数据库设计.doc

    数据库实施阶段是停车场管理系统数据库设计的第四步,该阶段的主要任务是根据物理模型设计数据库的实施细节。在这个阶段,需要确定系统的数据库管理系统、数据库存储结构和数据存取方式,并实施数据库的创建和配置。...

    03-数据库课程设计任务书-银行储蓄系统数据库设计.doc

    学生将运用所学的数据库设计理论,包括分析、设计和实现的全过程,以掌握数据库的精髓。设计过程中,需要重点关注如何利用存储过程和触发器来增强系统的功能。 **设计内容与要求** 1. **需求分析**:首先,需要对...

    数据库课程设计实习报告

    报告最后附上了参考文献列表,涵盖了数据库设计、软件工程、图书销售管理等相关领域的经典著作和最新研究成果,为读者提供了深入学习的资源指引。 综上所述,本次数据库课程设计实习是一次成功的实践探索,不仅完成...

    4数据库设计文档.doc

    5.1 表汇总列出了所有设计的表及其简要描述,5.2章节详细介绍了特定的“XXX表”的设计细节,包括字段、键的设置等。5.3章节讨论了视图的设计,作为对原始数据的抽象和简化。5.4章节则涉及存储过程、函数和触发器,...

    模板-数据库设计说明书.doc

    "数据库设计说明书模板" 数据库设计说明书是对数据库的设计和实现进行详细描述的文档,旨在为数据库的开发、测试和维护提供依据。该文档通常包括以下几个部分:项目概况、数据库设计概述、逻辑设计、物理设计、数据...

    数据库课程设计(大二)

    PPT应包括项目概述、设计细节、遇到的问题及解决方案,以及项目总结和反思。 8. **项目文档**:完整的项目文档是课程设计的重要组成部分,它详细记录了设计过程中的所有步骤,包括需求分析、系统设计、实现细节、...

    购物网站的数据库课程设计

    ### 购物网站的数据库课程...综上所述,《购物网站的数据库课程设计》一文通过详细阐述系统需求分析、数据库设计过程以及数据表设计细节,为读者呈现了一个完整的数据库设计方案,具有较高的学术价值和实践指导意义。

    数据库课程设计 运动会管理系统.rar

    在这个案例中,我们关注的是一个运动会管理系统的数据库设计。这个系统可能涉及到运动员信息管理、比赛项目安排、成绩记录等多个模块,每个模块都需要合理的数据结构和高效的查询策略。 首先,数据库设计通常分为...

    系统设计规范和模板word+pdf版(架构设计、概要设计、详细设计和数据库设计)

    4. **数据库设计**:数据库设计是系统设计中的重要部分,涉及数据模型(如ER模型)、表结构设计、索引设计、数据约束以及数据库操作的事务处理。数据库设计需要考虑数据的一致性、完整性和安全性,同时也要考虑查询...

    文档,详细设计,概要设计,设计,数据库设计

    - 数据库设计文档:包括数据库模式、表结构、索引和约束等。 - 接口设计文档:描述不同组件或系统之间的交互。 - 测试计划和测试用例:用于验证软件是否满足需求。 - 用户手册:指导用户如何使用软件。 通过以上...

    内部邮件数据库表设计文档

    本文档提供了内部邮件模块的数据库表设计,包括 send_mail、receive_mail 和 mail_attachments 三个表格的设计细节。这些表格的设计考虑了邮件的基本信息、发送状态、接收状态、删除状态和附件信息等方面,为内部...

    二手房数据库课程设计

    这些文件共同构成了一个完整的数据库课程设计项目,涵盖了数据库设计的基本元素,包括表结构、数据操作、业务逻辑和数据分析,对于理解和实践数据库管理系统的应用大有裨益。通过这样的课程设计,学生可以深入理解...

    数据库课程设计PPT

    数据库设计的目标是为特定的应用环境创建最佳的数据库模式,它是信息系统的核心,支撑着信息系统的运行,帮助人们进行信息处理和决策支持。 数据库设计涉及的技术知识广泛,包括数据库的基础知识和设计技术、计算机...

Global site tag (gtag.js) - Google Analytics