域(Domain)
简单地说,是用户自定义类型,但域还可以定义它的取值范围或默认值,采用域减少了维护字段类型的工作量,也减少数据的不一致性。
参照(Reference)
参照在数据库设计中是一个比较复杂的问题,它是实现数据的完整性主要要素之一,详细论述参考后面数据的约束。
在PowerDesigner中,可对参照完整性进行各项设置,参照的基数从0到n,对修改和删除约束可分别设置为None、Restrict、Cascade、Set Null、Set Default。由于INSERT包含在UPDATE操作中,因此没有单独的INSERT约束。
约束的不同设置产生不同的效果,以修改为例(删除相同):
None:父表修改,子表不影响。
Restrict:父表修改,如果子表存在,则出错。
Cascade:父表修改,如果子表存在,则相应的修改。
Set Null:父表修改,如果子表存在,则相应置空。
Set Default:父表修改,如果子表存在,则相应置默认值。
索引(Index)
索引是优化查询时采用一种数据库技术,索引有簇索引、非簇索引、唯一索引等。
设计索引时,要注意索引宽度,尽量减少索引的宽度。索引的宽度不是由字段的多少决定的,而是由字段的长度来决定。对于窄索引关键字,在每一索引页上放置更多的关键字和指针,这样就能花销更少的I/O找到数据。
对于复合索引,选择首列相当重要,否则可能不能利用该索引,当利用复合索引查询时。必须确保查询从首列开始。
索引还有一个填充因子(FillFactor),填充因子的大小视表的数据增长量和主键定义的情况而定。
触发器和存储过程(Trigger&&Procedure)
触发器在维护数据完整性起着重要作用,它比参照更具灵活性,
也能实现三层结构中数据层的业务规则。
存储过程是采用SQL及流程控制语句编写的完成某种业务的脚本。存储过程在数据处理上具有处理速度快、处理灵活等优点。
但是,存储过程极大地增加了与数据库之间的耦合,在数据库迁移时,需要重写存储过程,从而增加了版本维护的工作量。如果数据库要求从迁移性考虑,应尽量避免使用存储过程或者触发器。
如果不人为修改PowerDesigner的触发器,其迁移性PowerDesigner自动解决。
存储(Storage)
不同的数据库中有不同的概念,Sybase称为设备(Device),SQL Server称为文件或文件组(File、FileGroup),而Oracle称为表空间(TableSpace)。
根据系统创建一个或多个存储,按一定的优化规则存放。
数据库的划分
数据库的划分以它的物理分布为原则,而不应数据量、表类型等原则来划分,数据库的多少对数据库的性能影响不大。对于访问数据量大、访问频繁的表来说,I/O操作很容易形成严重的瓶颈,因此减少I/O操作和I/O操作阻塞是数据库设计考虑的主要问题,解决方法将将表放在多个设备上,设备需创建在不同的物理驱动器上,最好能用智能型或阵列。
日志和数据分开存储在不同设备上,如果索引多且占用空间大,也可以采用如此方式。
数据库数量少的维护成本比数量大少。
因此数据库划分以物理分布为原则。
在PowerDesigner提供计算数据库或表的方法(Compute Database Size),可帮助设计者完成数据库的划分。