Monthly Archives: March 2013

Oracle Performance Survival Guide读取笔记–第4章 数据库逻辑设计和物理设计

Oracle Performance Survival Guide读取笔记–第4章 数据库逻辑设计和物理设计 一、逻辑设计 采用符合第三范式的标准化模型 数据类型选择尽量使用VARCHAR变长字符,否则会浪费空间,全表扫描的时候性能变差超过4000字符的时候采用LOB类型,LONG属于过时的类型,不建议使用 主键选择 artificial key:人造键,无业务含义,大部分情况通过是通过oracle的序列产生的数字。 natrual key:自然键,一般为字符类型,有明确的业务含义,可以是单列或多列构成。 从性能角度建议使用artificial key,有三个原因: artificial key为数字类型,键的程度更短,因此生成索引树的深度会更低 artificial key不会更新,因此不会带来因外键更新带来的性能问题 二、从逻辑设计到物理设计的映射 实体 –> 表 实体继承,也就是OO开发中的父类和子类,如下面的例子: class Person { String firstName; String lastName; } class Customer extends Person { int customerCategory; } class Employee extends Person { double salary; } 在映射到数据库的表设计时,有三种方案(个人偏向于方案二): 方案一:父类person一张表,子类customer和employee各一张表 方案二:子类customer和employee各一张表,在表里面包含父类person的属性 方案三:仅一张表,包含所有person,customer,employee的字段,使用额外的 person_type字段区分子类 不建议使用方案一,主要原因是仅查询父类person表的情况较少,大部分时候需要表连接,性能较差。 表类型选择 [...]