数据库设计 最佳实践
- 为表和列使用定义明确且一致的名称(例如School,StudentCourse,CourseID…)。
- 表名使用单数形式(即使用StudentCourse代替StudentCourses)。 表代表实体的集合,不需要复数名称。
- 表名不要使用空格。 否则,您将不得不使用“ {”,“ [”,“”等字符来定义表格(即,要访问表格“学生课程”,您将编写“学生课程”。StudentCourse更好)。
- 不要为表名使用不必要的前缀或后缀(即使用School代替TblSchool,SchoolTable等)。
- 为了安全起见,请保持密码加密。 需要时在应用程序中解密它们。
- 对所有表使用整数id字段。 如果暂时不需要id,则将来可能需要(对于关联表,索引…)。
- 选择具有整数数据类型(或其变体)的列进行索引。 varchar列索引将导致性能问题。
- 将位字段用于布尔值。 使用整数或varchar不必要地消耗了存储空间。 还要以“ Is”开头这些列名称。
- 提供数据库访问的身份验证。 不要给每个用户管理员角色。
- 除非确实需要,否则请避免使用“选择*”查询。 使用“选择[required_columns_list]”可获得更好的性能。
- 如果应用程序代码足够大,则使用ORM(对象关系映射)框架(即,Hibernate,iBatis…)。 ORM框架的性能问题可以通过详细的配置参数来解决。
- 将大型和未使用/很少使用的表/表部分分区到不同的物理存储中,以提高查询性能。
- 对于大型,敏感且任务批评的数据库系统,请使用灾难恢复和安全服务,例如故障转移群集,自动备份,复制等。
- 使用约束(外键,检查,不为null…)以确保数据完整性。 不要完全控制应用程序代码。
- 缺乏数据库文档是邪恶的。 使用ER模式和说明记录数据库设计。 还要为触发器,存储过程和其他脚本编写注释行。
- 将索引用于大表上的常用查询。 分析器工具可用于确定在哪里定义索引。 对于检索一定范围的行的查询,聚集索引通常更好。 对于点查询,非聚集索引通常更好。
- 数据库服务器和Web服务器必须放置在不同的计算机上。 这将提供更高的安全性(攻击者无法直接访问数据),并且由于减少了请求数量和进程使用率,服务器的CPU和内存性能将更好。
- 由于性能问题,不能在经常查询的表中定义图像和Blob数据列。 这些数据必须放在单独的表中,并且它们的指针可以在查询表中使用。
- 必须根据需要使用规范化,以优化性能。 规范化不足会导致数据重复过多,规范化过度会导致太多表之间的联接过多。 它们都将获得较差的性能。
- 根据需要花费大量时间进行数据库建模和设计。 否则,节省(!)设计时间将导致(节省(!)设计时间)* 10/100/1000维护和重新设计时间。
参考:来自JCG合作伙伴的 20项数据库设计最佳实践 Cagdas Basaraner在CodeBuild博客上。
翻译自: https://www.javacodegeeks.com/2012/02/20-database-design-best-practices.html
数据库设计 最佳实践