- Published on
20条数据库设计最佳实践
- Authors
- Name
- Jason Yang
- @yangjinlong86
- 对
table
和column
使用明确定义的单词并且风格一致的命名。 - 表名使用单数(例如:使用
StudentCourse
而不是StudentCourses
),table
代表着一个实体的集合,不需要用复数命名。 - 表名不要用空格,否则,您将不得不使用
'{','[','''
等字符来定义表,访问时还需要用引号“Student Course”
, 直接用StudentCourse
会更好。 - 表名不要使用不必要的前缀或者后缀,例如使用
School
而不是TblSchool, SchoolTable
。 - 保持密码的安全性,需要用的时候在程序里解密
- 所有表使用
integer
类型ID字段。 即使暂时不需要ID,将来也可能会需要,例如关联表,索引等。 - 索引选择
integer
类型的列,varchar
列索引会引起性能问题。 - 使用位字段存储布尔值,使用
integer
或varchar
是不必要的存储消耗。布尔值的字段列命名使用is
作为前缀。 - 提供数据库访问权限,不要把管理员权限分配给所有人。
- 尽量避免出现select * 查询除非必须需要,使用select [需要的列]可以提高查询效率。
- 如果应用程序代码足够大,则使用
ORM(object relational mapping)
框架(例如hibernate
,MyBatis
...)。ORM框架的性能问题可以通过详细的配置参数来处理。 - 将大表、不用的表或很少使用的表,部分划分到不同的物理存储区以提高查询性能。
- 对于大型,敏感和任务评论者数据库系统,使用灾难恢复和安全服务,如故障转移群集,自动备份,复制等。
- 使用约束(外键,检查,非空...)来保证数据的完整性。 不要把所有的控制权都交给程序代码处理。
- 缺乏数据库文档是非常可恶的。 用ER图和说明文档来记录数据库设计。 也为触发器,存储过程和其他脚本编写注释行。
- 在大表上经常使用的查询创建索引。 分析工具可以用来确定需要定义哪些索引。 对于多行数据的查询,聚簇索引通常更好。 对于点查询,非聚集索引通常更好。
- 数据库服务器和Web服务器必须放置在不同的机器上。 这将提供更高的安全性(攻击者无法直接访问数据),并且由于请求数量和进程使用率降低,服务器CPU和内存性能会更好。
- 由于性能问题,不得在频繁查询的表中定义图像和
Blob
数据列。 这些数据必须放在单独的表中,并且它们的指针可以在查询的表中使用。 - 标准化必须根据需要使用,以优化性能。 欠规范化会导致数据的过度重复,过度规范化会导致太多表中的过多连接。两者都会影响性能。
- 一定要为数据库设计留足够的时间,否则可能会花费比设计多成百上千倍的时间来维护设计不佳的数据库甚至需要重新设计。