南京高端网站定制,建设银行不弹出网站,比较著名的seo网站,微信营销工具有哪些数据库设计#xff08;Database Design)是指对于一个给定的应用环境#xff0c;构造最优的数据库模式#xff0c;建立数据库及其应用系统#xff0c;使之能够有效地存储数据#xff0c;满足各种用户的应用需求#xff08;信息要求和处理要求#xff09;。
一、数据库设…数据库设计Database Design)是指对于一个给定的应用环境构造最优的数据库模式建立数据库及其应用系统使之能够有效地存储数据满足各种用户的应用需求信息要求和处理要求。
一、数据库设计的原则 表设计原则 1 1规范化与反规范化
规范化的优点是减少了数据冗余节约了存储空间相应逻辑和物理的I/O次数减少同时加快了增、删、改的速度。但是一个完全规范化的设计并不总能生成最优的性能因为对数据库查询通常需要更多的连接操作从而影响到查询的速度而且范式越高性能就会越差。出于性能和方便管理的考虑原则上表设计应满足第三范式。有时为了提高某些查询或应用的性能而可以破坏规范规则即反规范化。
数据应当按两种类别进行组织频繁访问的数据和频繁修改的数据。对于频繁访问但是不频繁修改的数据内部设计应当物理不规范化。对于频繁修改但并不频繁访问的数据内部设计应当物理规范化。比较复杂的方法是将规范化的表作为逻辑数据库设计的基础然后再根据整个应用系统的需要物理地非规范化数据。
2数据表分类说明
根据应用的实际需要和特点可以将数据表进行如下分类 1 l 基本数据表描述业务实体的基本信息。例如人员基本信息、单位基本信息等。
l 标准编码表描述属性的列表值。例如职称、民族、状态等。
l 业务数据表记录业务发生的过程和结果。例如人员调动登记、变更通知单等。
l 系统信息表存放与系统操作、业务控制有关的参数。例如用户信息、权限、用户配置信息等。
l 统计数据表存放业务数据统计值。例如通知单统计、人员类别统计等。
l 临时处理表存放业务处理过程中的中间结果。
l 其他类型表存放应用层的日志、消息记录等。 字段设计原则 1 1一般来说应该使用能正确存储和表示数据的最小类型。如果不确定需要什么数据类型则选择不会超出范围的最小类型。
2选择更简单的数据类型。例如比较整数的代价小于比较字符因为字符集和排序规则使字符比较更复杂。
3尽可能把字段定义为 NOT NULL。对于字段能否NULL应该在SQL建表脚本中明确指明不应使用缺省。
4一个表中的字段不要太多理论上不要超过80个。
5数据库中所有布尔型中数值0表示为假数值1表示为真
6当字段定义为字符串类型时使用VARCHAR2而不用NVARCHAR
7字段尽可能有默认值字符型的默认值为一个空字符值串数字型的默认值为数值0。 键设计原则 1 1为关联字段创建外键。
2所有的键都必须唯一。
3尽可能避免使用复合键。
4外键总是关联唯一的键字段。
5尽可能使用系统生成如序列SEQUENCE产生的主键。
6可选键有时可做主键。
7一个表中组合主键的字段个数尽可能少。 索引设计原则 1 1如果一列出现在表达式或函数中不会使用该列上的索引
2要索引外键
3对于索引选择性高的列使用B-Tree索引
4对于索引选择性低的列使用位图索引
5HASH索引只适用于相等比较
6不要索引大型字段有很多字符的字段
7不要索引常用的小型表 LOB设计原则 1 如无特别需要避免使用大字段BLOB、CLOB、LONG等。如使用时必须使用BLOB或CLOB类型。
二、完整性设计
采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于应用程序保证数据完整性它不能保证表之间外键的完整性。
1主键约束
每个表要求有主健主健字段或组合字段必须满足非空属性和唯一性要求。
2外键约束
1对于关联两个表的字段一般应该分别建立主键、外键。实际是否建立外键根据对数据完整性的要求决定。
2根据需要适当设置父表数据修改时对子表的影响
l 父表中删除数据级联删除受限删除置空值。
l 父表中插入数据受限插入递归插入。
l 父表中更新数据级联更新受限更新置空值。
3NULL值
由于NULL值在参加任何运算时结果均为NULL所以必须利用NVL()函数把可能为NULL值得字段或变量转换为非NULL的默认值。
4CHECK条件
对于字段有检查性约束要求指定CHECK规则。
5触发器
触发器是一种特殊的存储过程通过对表的DML操作而触发执行是为确保数据的完整性和一致性不被破坏而创建实现数据的完整约束。选择触发器的BEFORE或AFTER事务属性的时候对表操作的事务属性必须与应用程序事务属性保持一致以避免死锁发生。在大量修改数据时尽量避免使用触发器。
6视图
为了在数据库和应用程序之间提供另一层抽象可以为应用程序建立专门的视图而不必非要应用程序直接访问表。这样做还在处理数据库变更时提供了更多的自由。视图是虚拟的数据库表在使用时要遵循以下原则
l 为简化查询将复杂的检索或子查询通过视图实现。
l 提高数据的安全性只将需要查看的数据信息显示给权限有限的人员。
l 视图中如果嵌套使用视图级数不要超过3级。
l 由于视图中只能固定条件或没有条件所以对于数据量较大或随时间的推移逐渐增多的表不宜使用视图可以采用实体化视图代替。
l 除特殊需要避免类似SELECT * FROM [TableName] 而没有检索条件的视图。
l 视图中尽量避免出现数据排序的SQL语句。
三、命名规范
1总则
1所有命名采用26个英文大小写字母和09这十个自然数加上下划线_组成。不能出现其他字符注释除外。
2长度不超过30个字符。
3实际名字尽量描述实体的内容由英文单词、单词组合或单词缩写组成不以数字和_开头。
4命名中禁止使用SQL关键字。
5对象名尽量短。
2表
表以单数形式名词或名词短语命名。如果表名仅有一个单词那么建议不使用缩写而是用完整的单词。
数据表 t_inf_系统标识_表标识
编码表 t_cod_系统标识_表标识
系统表 t_sys_系统标识_表标识
统计表 t_sta_系统标识_表标识
临时表 t_tmp_系统标识_表标识
日志表 t_log_系统标识_表标识
3字段
l 采用有意义的字段名应该是易于理解能表达字段功能的英文单词或单词缩写一般不超过三个英文单词。
l 系统中所有属于内码的字段仅用于表示唯一性和程序内部用到的标识性字段名称取为ID。
l 系统中属于是业务范围内的编号的字段其代表一定的业务信息这样的字段建议命名为CODE其数据类型为VARCHAR该字段需加唯一索引。
l 字段名不要与表名重复
l 不要在列的名称中包含数据类型。
4主键
PK_表名
5外键
FK_表名主表名外键字段名
6索引
IDX_表名_构成索引的字段名
如果复合索引的构成字段较多则只包含第一个字段并添加序号。
7视图
V_系统标识_视图标识
8存储过程
SP_系统标识_存储过程标识
9函数
F_系统标识_函数标识
10 触发器
TR_表名_i、u、d的任意组合
11 用户定义数据类型
UD_自定义数据类型标识
12 序列
SEQ_序列标识
13 局部变量
L_变量标识
14 全局变量
G_变量标识
15 游标变量
L_CUR_变量标识或G_CUR_变量标识
16 存储过程或函数定义中的参数
IN型参数P_参数标识
OUT型参数R_参数标识
函数返回值R_变量标识
四、安全性设计
1管理默认用户
在生产环境中必须严格管理SYS和SYSTEM用户必须修改其默认密码禁止用该用户建立应用数据库对象。删除或锁定SCOTT等默认安装但不使用的用户。
2数据库级用户权限设计
必须按照应用需求设计不同的用户访问权限。包括应用系统管理用户普通用户等按照业务需求建立不同的应用角色。用户访问另外的用户对象时应该通过创建同义词对象SYNONYM进行访问。
3角色与权限
确定每个角色对数据库表的操作权限如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限不多也不少。在应用时再为用户分配角色则每个用户的权限等于他所兼角色的权限之和。
4应用级用户设计
应用级的用户帐号密码不能与数据库相同防止用户直接操作数据库。用户只能用帐号登录到应用软件通过应用软件访问数据库而没有其它途径操作数据库。
5用户密码管理
用户帐号的密码必须进行加密处理确保在任何地方查询都不会出现密码的明文。
五、SQL语句编写
1字符类型数据
SQL中的字符类型数据应该统一使用单引号。特别对纯数字的字符串必须用单引号否则会导致内部转换而引起性能问题或索引失效问题。利用TRIM(),LOWER()等函数格式化匹配条件。
2复杂SQL
对于非常复杂的SQL特别是有多层嵌套带子句或相关子查询的应该先考虑是否设计不当引起的。对于一些复杂SQL可以考虑使用程序实现。
3避免IN子句
使用 IN 或 NOT IN 子句时特别是当子句中有多个值且表数据较多时速度会明显下降。可以采用连接查询或外连接查询来提高性能。
4避免使用SELECT * 语句
如果不必要取出所有数据不要用 * 来代替应给出字段列表。
5避免不必要的排序
不必要的数据排序大大的降低系统性能。
6INSERT语句
使用INSERT语句一定要给出插入值的字段列表这样即使表加了字段也不会影响现有系统的运行。
7多表连接
做多表操作时应该给每个表取一个别名每个表字段都应该标明其所属哪个表。
8参数的传递
SQL语句的编写变量尽量使用“?”绑定变量。
9存储过程、函数中的注释示例如下
/*
目的
作者
创建日期
*/
/*
修改顺序号
修改者
修改日期
修改原因具体原因详细描述
*/
六、建模管理方法
1建模工具
统一使用PowerDesigner软件建模。推荐版本PowerDesigner 15中文版。
2建模步骤
1逻辑建模
根据数据库设计和命名规范先在PowerDesigner中建立逻辑模型(LDM)文件。要求每个表和字段都要有注释说明Check Model不能出现错误。
2根据逻辑模型文件创建对应数据库的物理模型文件。
3生成数据库结构及其相应的SQL脚本。
3模型维护
1所有关于数据库的表、字段及关系、说明等均以物理模型文件为准。
2由开发人员将变更需求提交项目负责人审批。
3项目负责人同意变更后由相应开发人员负责编写变更脚本提交DBA。
4DBA更新数据库及其相关文档并维护所有部分的一致性。
七、其他设计技巧
1避免使用触发器
触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如确实需要采用触发器最好集中对它文档化。
2保存常用信息
让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库。
3包含版本机制
在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。
4编制文档
对所有的命名规范、限制、数据字典、存储过程、函数都要编制文档。采用给表、列、触发器等加注释的数据库工具。对开发、支持和跟踪修改非常有用。对数据库文档化也会大大减少犯错的机会。
5测试、测试、反复测试
建立或者修订数据库之后必须用用户新输入的数据测试修改的字段。最重要的是让用户进行测试并且同用户一起保证选择的数据类型满足要求。测试需要在把新数据库投入实际服务之前完成。
6检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说针对每一种最终表达数据的原型应用保证检查了数据模型并且查看如何取出数据