PowerDesigner设计数据库使用规范Word文档下载推荐.docx
《PowerDesigner设计数据库使用规范Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PowerDesigner设计数据库使用规范Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
3、大小写规范:
构成Oracle数据库中的各种名称(表明,字段名,过程名,视图名等等)的所有字符,必须使用大写,也就是不能在脚本中,对任何名称添加双引号“”来设定字符的大小写形式,只要不采用“”限制,Oracle自动会将各名称转化成大写。
2.进行ER设计的准备工作
2.1实体命名不相同检查
PowerDesigner默认不能存在相同名称的实体属性,这也是考虑到可能产生的一些如主键外键等名称冲突问题,但当进行实际数据库设计时,可能会多次使用相同数据项(DataItem)便于理解各实体。
为此需要对更改PowerDesigner相关设置。
软件默认DataItem不能重复使用,需要进行以下操作:
选择工具à
ModelOptions,在ModelSetting设置目录中,将DataItem下的UniqueCode取消选中即可,系统默认将UniqueCode和AllowReuse均选中。
同时该设置均是面向特定模型的,即针对当前模型有效,若希望在其它模型中也有此命名设置,则需要重新进行设置。
不过在CheckModel时,如果选择全部Check,则依旧会报DataItem重名的错误信息,这时需要我们在人为检查确认数据项无误时,可以在选择不对DataItem不检查,如下图示:
3.定义实体
3.1创建entity
3.1.1创建entity步骤
1、在CDM的图形窗口中,单击工具选项版上的Entity工具,再单击图形窗口的空白处,在单击的位置就出现一个实体符号。
点击Pointer工具或右击鼠标,释放Entity工具。
如图所示:
2、双击刚创建的实体符号,打开下列图标窗口,在此窗口“General”标签中可以输入实体的名称、代码、描述等信息。
Name:
是用来在模型中标识一个实体,一般用于模型在界面中的显示(这个可以通过更改选项设置进行改变)。
在一个模型当中,实体的名字不能重复。
Code:
在模型转化时一般作为对象的物理名称,比如把实体属性的Code转化为数据库中的列名,一般采取与Name一致。
Generate:
默认是选择状态,如果取消,则在转化为其他模型时,会忽略这个实体。
3.1.2entity命名规范
CDM中的实体等价于PDM中的表。
1、表的命名只能使用英文字母,数字和下划线。
2、命名以是名词的复数形式,如cities,categories,friends等。
3、命名名尽量用全名。
4、若库中有多个系统,表名采用系统名称+单词或多个单词,系统名是开发系统的缩写,系统名称全部采用小写英文字符,如bbs_title,bbs_torum_type。
若库中只含有一个系统,那么表名仅用一个单词或多个单词。
5、单词选择能够概括表内容的一个或多个英文单词,单词间用下划线"
_"
分割,如user_info,user_type。
6、关连表命名规则为“表A_表B”,如:
user_articletype,user_formtype。
3.2添加entity属性
3.2.1添加entity属性步骤
1)在上述窗口的“Attribute”选项标签上可以添加属性,如下图所示。
注意:
数据项中的“添加属性”和“重用已有数据项”这两项功能与模型中DataItem的Uniquecode和Allowreuse选项有关。
P列表示该属性是否为主标识符;
D列表示该属性是否在图形窗口中显示;
M列表示该属性是否为强制的,即该列是否为空值。
如果一个实体属性为强制的,那这个属性在每条记录中都必须被赋值,不能为空。
按“Crtl+U”呼出“定制列过滤器”的窗口,可以根据自己的喜好和实际需要选择那些列出现在窗口中,那些隐藏。
使用快捷键“Crtl+E”可以允许或者禁止当前过滤器。
2)在上图所示窗口中,点击属性按钮,弹出属性对话框,如下图所示。
3.2.2添加entity属性规范
3.1.2.1字段设计规范
1、表名的name为汉字,code为字母;
表中字段的name为汉字,并与备注是相同的;
code为字母;
2、一个表中的字段不要太多,理论上不要超过80个。
3、一个表中的各字段的访问频繁度应该基本一致。
4、一个表中的所有字段,应当能存储在一个数据块中(BLOCK),也即:
表的单行字段总长度<
db_block(减去pctfree)。
5、每个字段必须有注释,说明其含义,对于冗余字段还要特别说明其维护方法,外键字段说明参照与哪个表。
6、字段尽可能有默认值,字符型的默认值为一个空字符值串,数字型的默认值为数值0。
7、存储图片,视频,音频,文件,500字节以上文本等占用太多空间的字段(大对象字段),不能和其他字段存储在一个表中。
3.1.2.2字段命名规范
1、字段名为有意义的单词,或单词的缩写。
2、如果字段由几个单词组成,则单词间用下划线("
)分割,如client_id,st_code等。
3、不要使用数据库关键字,如:
name,time,datetime,password等。
3.1.2.3字段类型及长度规范
1、对于数值类型固定使用number。
number是最基本的数值类型,其他都是number的衍生,底层都是number,比如integer/int完全映射到number(38)。
如果需要对number做复杂的运算,建议先用cast内置函数转换number为浮点数类型。
number是变长类型,在计算表存储空间的时候要切记。
2、char和varchar2的选择:
从空间上考虑,用varchar2合适;
从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
如果预期某列中的数据范围变化很大,但变化并不频繁,那末对这样的列使用varchar2最为适宜。
3、如果使用char,在数据迁移等出现以上情况,则必须使用trim()函数截去字串后的空格。
4、决定行长时,既不能太浪费,又不能太吝惜。
考虑到将来的需要,并且意识到,如果增加行长而没有改变一页中容纳的行数,那末增加的空间就等于免费使用。
5、能够用数字类型的字段尽量选择数字类型而不用字符串类型的,这会降低查询和连接的性能,并会增加存储开销。
这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
6、尽可能把字段定义为notnull。
所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary、varbinary外,必须有默认值,因为在数据库查询中,有null值会影响查询的性能。
7、如无特别需要,避免使用大字段(BLOB、CLOB、LONG等),如使用必须使用BLOB或CLOB类型。
8、由数据库产生的系统时间首选数据库的日期型,如DATE类型。
3.3属性的检查约束
3.3.1定义属性检查约束操作
在实体属性的特性窗口,打开如图所示的检查选项卡:
在这个选项卡可以定义属性的标准检查约束,通过check约束可限制字段的取值。
窗口中每项的参数的含义,如下:
3.3.2约束命名规范
主键约束:
pk_表名_字段名
外键约束:
fk_表名_字段名
唯一约束:
un_表名_字段名
非空约束:
nn_表名_字段名
检查约束:
ck.....
3.4标示符
3.4.1标示符添加步骤
CDM中的标识符等价于PDM中的主键。
如果实体只有一个标识符,则它为主标识符。
如果实体有多个标识符,则其中一个被指定为主标识符,其余的标识符为次标识符。
1、定义主、次标识符
1)选择某个实体双击弹出实体的属性对话框。
在Identifiers选项卡上可以进行实体标识符的定义。
如下图所示
2)选择第一行“主标识符”,点击属性按钮或双击第一行“主标识符”,弹出属性对话框,如图所示:
3)选择"
Attributes"
选项卡,再点击“AddAttributes”工具,弹出如图所示窗口,选择某个属性作为标识符。
3.4.2标示符添加规范
3.4.2.1主/外键规范
1、除临时表和外部表,以及流水表外,其他表都要建立主键。
2、所有表的主键都设为表的ID,为int型,取值来自序列sequence自增;
3、主键应当是对用户没有意义的。
如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
4、对于500万以上的表,采用先建唯一索引再添加主键约束的方式来创建主键。
5、主键永远不能修改,也不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
6、尽量不用复合主键。
7、为了提高性能,对于数据量比较大的标要求对外健建立索引。
对于有要求级联删除属性的外键,必须指定ondeletecascade。
8、pd中外键是通过关系Relationship自动来建立的,不需要手动建立。
不然会产生多余的键。
所以设计时,关注实体本身的字段,以及实体间的关系,特别是多对多和依赖关系。
3.4.2.2索引规范
1、主健字段或组合字段必须满足非空属性和唯一性要求。
2、表建好后数据库自动为表生成一个索引(为自动增长的列生成唯一索引),如果在对这列添加索引,数据库会给一个警告,内容大概是,已经为这列添加了索引,建议修改索引名称和自动增长列名保持一致,为了方便使用。
3、如果字段是与其它表的关键字相关联而设计为外键引用,需建索引。
4、无论表的大小,外键列都要建立索引。
一是为了子父表关联查询的性能考虑,二是为了避免父子表修改而发生死锁。
5、如果字段需做模糊查询之外的条件查询,需建索引。
6、如果一列出现在表达式或函数中,该列上的索引将失效。
7、除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引。
8、设计索引时,不要索引宽度大的字段。
索引的宽度不是由字段的多少决定的,而是由字段的长度来决定。
对于窄索引关键字,在每一索引页上放置更多的关键字和指针,这样就能花销更少的I/O找到数据。
9、由于使用形式需和创建形式一致,尽量避免使用函数索引。
如果想要使用函数索引,请尽量进行转化。
10、静态表中的低基数列可以使用位图索引。
在事务型数据库(OLTP)中禁止使用位图(bitmap)索引,在报表型数据库(OLAP)中的静态表,可适当使用。
11、对分区表的索引,需要做分区维护的,必须使用局部索引。
12、重建索引使用alterindexrebuild方式,禁止采用dropindex&
createindex方式。
4.生成物理模型
进行完数据实体的录入之后,可以生成物理模型。
4.1配置RDBMS
工具à
Resourcesà
DBMSà
Oracle10gà
根据需求进行设置。
建议在这里将生成的数据库的脚本中表和子段的引号去掉。
在Scriptà
Sqlà
formatà
CaseSensitivityUsingQuoteà
选择“No”。
在这里还可以设置,哪些是无效字符,脚本的大小写,前缀的生成等等。
4.2产生物理数据模型
GeneratePhysicalDataModelà
选择数据库类型à
物理数据模型已经完成。
4.3产生数据库脚本
数据库à
GenerateDatabaseà
选择脚本存储路径,文件名及类型à
产生脚本完成。
点击Edit以后可以在记事本中打开此脚本,最后就可以去运行此脚本了。
从CDM到PDM的转换需要注意:
不能改变Diagram的名称,在树状图中,如果钩选红色标出的Symbol表示覆盖修改,不钩选表示保护修改。
还可以在产生物理模型之前设置好脚本比如说,外键,联系名,索引的命名格式。
GeneratePhysicalDataModel->
Details中设置。
生成数据库之前需要进行连接的配置。
DatabaseE->
configureconnection->
一般进行的是ODBC配置,最后测试连接。