数据库逻辑设计

   第一章:数据库详细设计内容
1、数据库系统级设计
2、数据库结构设计
3、数据库编程设计
4、数据库集群运维设计
5、数据库安全设计
6、数据分析设计
7、数据报表设计
在做数据库详细设计之前应该对ORACLE、MYSQL、SQLSERVER等关系型数据库和其他非关系型数据库特点、性能有详细的了解。
第二章:
一、数据库结构设计
1、按照软件项目实施流程,在数据库逻辑设计属于系统详细设计内容,在这之前应该先对系统的客户需求进行了概要设计,在概要设计之后,对业务流程和功能模块进行了系统总体设计。
2、在数据库逻辑设计之前,应该在业务流程和系统需求的基础上,进行界面详细设计和数据流图设计。
3、最好不要用自增属性字段作为主键与子表关联。不便于系统的迁移和数据恢复。对外统计系统映射关系丢失。
4、原来的表格必须可以通过由它分离出去的表格重新构建。使用这个规定的好处是,你可以确保不会在分离的表格中引入多余的列,所有你创建的表格结构都与它们的实际需要一样大。应用这条规定是一个好习惯,不过除非你要处理一个非常大型的数据,否则你将不需要用到它。
5、尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
6、对于不可变字符类型char和可变字符类型varchar 都是8000字节,char查询快,但是耗存储空间,varchar查询相对慢一些但是节省存储空间。在设计字段的时候可以灵活选择,例如用户名、密码等长度变化不大的字段可以选择CHAR,对于评论等长度变化大的字段可以选择VARCHAR。
7、字段的长度在最大限度的满足可能的需要的前提下,应该尽可能的设得短一些,这样可以提高查询的效率,而且在建立索引的时候也可以减少资源的消耗。
二、数据库查询设计
1、保证在实现功能的基础上,尽量减少对数据库的访问次数;
2、通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;
3、能够分开的操作尽量分开处理,提高每次的响应速度;
4、在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;
5、算法的结构尽量简单;
6、在查询时,不要过多地使用通配符如:SELECT * FROM T1 语句,要用到几列就选择几列,如:SELECT COL1,COL2 FROM T1;
7、在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的数据的;
8、 在没有建索引的情况下,数据库查找某一条数据,就必须进行全表扫描了,对所有数据进行一次遍历,查找出符合条件的记录。在数据量比较小的情况下,也许看不出明显的差别,但是当数据量大的情况下,这种情况就是极为糟糕的了。
9、SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如: 
                SELECT * FROM TABLE1 WHERE NAME='ZHANGSAN' AND TID > 10000 
 
           和执行: 
 
                SELECT * FROM TABLE1 WHERE TID > 10000 AND NAME='ZHANGSAN' 
 
        一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果TID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前一句则要先从全表中查找看有几个NAME='ZHANGSAN'的,而后再根据限制条件条件TID>10000来提出查询结果。 
 
        事实上,这样的担心是不必要的。SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。虽然查询优化器可以根据where子句自动的进行查询优化,但有时查询优化器就会不按照您的本意进行快速查询。 
 
        在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。
 所以,优化查询最重要的就是,尽量使语句符合查询优化器的规则避免全表扫描而使用索引查询。
posted @ 2021-07-18 16:37  DYKOY  阅读(986)  评论(0编辑  收藏  举报