20条数据库设计最佳实践
2016-06-24 18:05
399 查看
通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的。当然这是两个泛泛而谈的指标。为了达到数据库设计规范化的要求最好满足以下20条规则:
1、使用定义良好的和一致的名称表和列(如School、StudentCourse CourseID…)。
2、使用单一的表名(即使用StudentCourse代替StudentCourses)。表代表实体的集合,不需要复数的名字。
3、不要使用空格来定义表名。否则你将不得不使用’{‘、”、’”’等字符定义表(例如accesing表学生课程你会写”Student Course”。StudentCourse要好得多)。
4、不要使用不必要的前缀或后缀表名(例如使用School而不是TblSchool、SchoolTable等等)。
5、保持加密密码的安全。在应用程序需要时进行解密。(散列存储、单向加密)
6、使用整数类型的id应用于所有表。如果暂时不需要id,它可能需要在未来(关联表,索引……)。
7、选择整数数据类型(或其变体)的列为索引。varchar类型的列索引将会导致性能问题。
8、使用bit类型应用于布尔值。使用integer或varchar就会产生不必要的存储消耗。当命名这些列的时候最好以”Is”开头。
9、需要数据库访问权限。不要给每个用户admin角色。
10、避免”select *”查询,直到它真的是必要的。使用”选择[required_columns_list]”获得更好的性能。
11、假如程序代码比较复杂,使用ORM(object relational mapping)框架。ORM框架的性能问题可以由详细的参数配置。
12、把那些用得很少或者没有使用的表分配到不同的物理存储,这样就可以得到更好的查询性能。
13、对于那些大的、敏感的和以及最要的数据库系统,利用灾难恢复与安全的服务。例如故障转移集群、自动备份、复制等。
14、对数据的完整性使用约束(外键,检查,not null…)。不要把所有的控制逻辑交给应用程序代码。
15、缺乏数据库文档是很不幸的。编写数据库设计文档使用ER图并且说明。并且为你触发器、存储过程和其他脚本写注释。
16、为大表并且常用的查询增加索引。分析器工具可以用来确定哪里需要使用索引。查询一系列的行来作为条件,联合索引通常是更好。对于单个字段的条件查询,为该字符作为索引通常是更好。
17、数据库服务器和web服务器必须部署在不同的机器上。这将提供更多的安全(攻击者不能直接访问数据)并且服务器CPU和内存性能会更好,因为减少请求数和处理。
18、图形和blob数据列不能定义在频繁查询的表中,这是基于的性能考虑。把这些数据单独放在单独的表中。然后用引用指向这些数据,也就是关联查询。
19、必须使用数据库设计第三范式规范化要求,优化性能。不使用范式将导致过度重复的数据在太多的表中,过度使用范式将导致太多的表需要jion。他们都会使用系统的性能变得很差。
20、很有必要花时间对数据库进行建模和设计。否则为了减少设计时间将导致花费 10倍/100倍甚至1000倍的时候用于维护和重新设计。
原文地址:20 Database Design Best Practices
1、使用定义良好的和一致的名称表和列(如School、StudentCourse CourseID…)。
2、使用单一的表名(即使用StudentCourse代替StudentCourses)。表代表实体的集合,不需要复数的名字。
3、不要使用空格来定义表名。否则你将不得不使用’{‘、”、’”’等字符定义表(例如accesing表学生课程你会写”Student Course”。StudentCourse要好得多)。
4、不要使用不必要的前缀或后缀表名(例如使用School而不是TblSchool、SchoolTable等等)。
5、保持加密密码的安全。在应用程序需要时进行解密。(散列存储、单向加密)
6、使用整数类型的id应用于所有表。如果暂时不需要id,它可能需要在未来(关联表,索引……)。
7、选择整数数据类型(或其变体)的列为索引。varchar类型的列索引将会导致性能问题。
8、使用bit类型应用于布尔值。使用integer或varchar就会产生不必要的存储消耗。当命名这些列的时候最好以”Is”开头。
9、需要数据库访问权限。不要给每个用户admin角色。
10、避免”select *”查询,直到它真的是必要的。使用”选择[required_columns_list]”获得更好的性能。
11、假如程序代码比较复杂,使用ORM(object relational mapping)框架。ORM框架的性能问题可以由详细的参数配置。
12、把那些用得很少或者没有使用的表分配到不同的物理存储,这样就可以得到更好的查询性能。
13、对于那些大的、敏感的和以及最要的数据库系统,利用灾难恢复与安全的服务。例如故障转移集群、自动备份、复制等。
14、对数据的完整性使用约束(外键,检查,not null…)。不要把所有的控制逻辑交给应用程序代码。
15、缺乏数据库文档是很不幸的。编写数据库设计文档使用ER图并且说明。并且为你触发器、存储过程和其他脚本写注释。
16、为大表并且常用的查询增加索引。分析器工具可以用来确定哪里需要使用索引。查询一系列的行来作为条件,联合索引通常是更好。对于单个字段的条件查询,为该字符作为索引通常是更好。
17、数据库服务器和web服务器必须部署在不同的机器上。这将提供更多的安全(攻击者不能直接访问数据)并且服务器CPU和内存性能会更好,因为减少请求数和处理。
18、图形和blob数据列不能定义在频繁查询的表中,这是基于的性能考虑。把这些数据单独放在单独的表中。然后用引用指向这些数据,也就是关联查询。
19、必须使用数据库设计第三范式规范化要求,优化性能。不使用范式将导致过度重复的数据在太多的表中,过度使用范式将导致太多的表需要jion。他们都会使用系统的性能变得很差。
20、很有必要花时间对数据库进行建模和设计。否则为了减少设计时间将导致花费 10倍/100倍甚至1000倍的时候用于维护和重新设计。
原文地址:20 Database Design Best Practices
相关文章推荐
- mysql 锁 实验
- 关系型数据库之MariDB 10.0.10多主一从的架构及多线程复制架构
- 图文说明 Visual Studio 2013/2015 编译 libpqxx 步骤以及常见编译错误
- SpringBoot入门系列:第四篇 redis
- mysql与oracle区别
- hive-1.21用mysql做元数据库安装详解及遇到的问题解答
- 将textarea/Input里面带有‘换行符’或者空格的字符串处理成用','分隔的支持SQL的in()查询
- MySQL数据库引擎详解
- MySQL的多存储引擎架构
- 查询当天数据(mysql)
- flume整合redis
- 数据库性能问题排查
- mysq-数据表新增字段、重名字段、删除字段
- 蛋疼的mysql_ping()以及MYSQL_OPT_RECONNECT
- mysql 用户变量不能赋予null值
- CentOS6.4 安装MongoDB
- Mysql JDBC Url参数说明
- 数据库优化总结
- mysqldump(数据库导出)参数详细说明
- ORACLE 11G 备库传备库级联传递(cascade dg) 的配置方法