Power Designer:数据库表设计工具

PowerDesigner是Sybase公司的一款软件,使用它可以方便地对系统进行分析设计,他几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型、面向对象模型。今天的课程讲用Power Designer来做物理数据模型,即进行数据库表设计。

在项目设计阶段通常会使用PowerDesigner进行数据库设计。使用PowerDesigner可以更加直观的表现出数据库中表之间的关系,并且可以直接把设计好的表导出相应的建表语句

1、Power Designer使用(创建PDM)

File-->new-->Physical Data Model-->给Model name起名pd_test-->DBMS中选择MYSQL5.0-->确定

快捷键:alt+0,显示左侧列表

Pd_test右键-->new-->table-->name是说明性的文字,真正的表名是通过code来看的,两个一样也可以。给name取值为“用户表”,给code取值为“t_user” -->Columns-->添加字段,如果是主键则勾选P(primary key),varchar类型要指定长度,varchar类型选择varchar(%n),,如果长度是11,则在length那一列填11,此时Data_type类型由varchar(0)变为varchar(11),int和Integer类型不用指定长度,name那一列写中文名,code那一列写字段名,-->设置主键自增:选中主键那一行,右键,选择properties,点击是,勾选Identity,它表示主键自增,点击应用,点击确定-->点击确定,这样就创建出一个用户表

注意:如果不添加主键自增,将sql语句导入数据库之后,要在设计表的时候,勾选“自动递增”

快速创建表:在palette中点击,单击空白屏幕,双击表,修改表的信息。

添加外键约束:在t_order表中添加外键字段user_id,-->在palette中点击,再单击订单表,按住不放拖动到用户表,但是此时外键加到id上了-->双击中间连接的箭头-->点击Joins-->将子表的外键列由id修改为user_id-->确定,这样user_id就变成了外键

2、Power Designer使用(导出SQL脚本)

点击保存,可以保存为pdm文件,保存之后,双击该文件就可以打开powerDesigner

DataBase-->Generate DataBase-->Directory选C:\Users\ASUS\Desktop,File name选health_test-->确定-->close-->关闭Result list,此时桌面上已经生成sql文件-->打开Navicat的health数据库-->将生成的sql文件拖动到health的白色区域-->点击开始-->关闭-->在空白区域点击右键,选择刷新,发现数据库表就生成了。

3、Power Designer使用(逆向工程)

上面我们是首先创建PDM模型,然后通过PowerDesigner提供的功能导出SQL脚本。实际上这个过程也可以反过来,也就是我们可以通过SQL脚本逆向生成PDM模型,这称为逆向工程,操作如下:

File-->Reverse Engineer-->DataBase-->修改Model name为pd_2-->确定-->Selection-->add File-->选择health_test.sql文件-->打开-->确定

4、Power Designer使用(生成数据库报表文件)

通过PowerDesigner提供的功能,可以将PDM模型生成报表文件,

Report-->Report Wizard-->指定报表名称和语言Simplified Chinese-->next-->next-->next-->完成-->保存-->是,这时会生成htm文件,

5、使用Power Designer创建表格注意事项:

1)、int和Integer类型不用指定长度。varchar类型要指定长度,varchar类型选择varchar(%n)。

2)、mysql数据库表字段命名规范:

(1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔

(2)全部小写命名,禁止出现大写

(3)字段必须填写描述信息

(4)禁止使用数据库关键字,如:time ,datetime, password 等

(5)字段名称一般采用名词或动宾短语。动宾短语示例:is_friend is_good,名词 示例:user_id user_name sex

(6)采用字段的名称必须是易于理解,一般不超过三个英文单词

(7)在命名表的列时,不要重复表的名称。例如,在名employe的表中避免使用名为employee_lastname的字段

(8)不要在列的名称中包含数据类型

(9)字段命名使用完整名称,禁止缩写

待优化命名示例

①大小写规则不统一

错误示例:user_id houseID

说明:使用统一规则,修改为”user_id”,”house_id”

②加下划线规则不统一

错误示例:username userid isfriend isgood

说明:使用下划线进行分类,提升可性,方便管理,修改为”user_name”,”user_id”,”is_friend”,”is_good”

③字段表示不明确

错误示例:uid pid

说明:使用完整名称,提高可读性,修改为”user_id”,”person_id”

3)、字段类型规范

(1)所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必须有默认值,字符型的默认值为一个空字符值串’’,数值型的默认值为数值0,逻辑型的默认值为数值0

(2)系统中所有逻辑型中数值0表示为“假”,数值1表示为“真”,datetime、smalldatetime类型的字段没有默认值,必须为NULL

(3)用尽量少的存储空间来存储一个字段的数据。使用int就不要使用varchar、char,如手机号用int类型(数据库设计过程中尽量使用int来作为字段类型,因为在所有的数据类型中int不管是存储空间还是执行速度方面都是最好的。例如:如果业务中存储的都是数据的话而且长度不是特别长的话,就可以考虑使用int来进行存储,或者业务中要对数据进行排序的时候需要使用某一标识权重之类的,也可以使用int来进行存储。但是不要因为int高效,而有意识的把所有字段都设计成int来处理,最终还是要根据业务的具体需求来设计相应的字段。当数据存储的是字符,且长度是一个固定区间定值的话就可以考虑使用char来进行存储,如果字符长度是未知的且长度变化特别明显的话,这个时候最好使用varchar来存储,如性别最好用char(1),当然也可以用varchar(1),建议'1'=男,'2'=女,''或者其他就是未知,小于10位且长度基本固定的字符串用char,长度大于10的用varchar,varcha在10以内占用空间比char大。char c='a'在内存中确实只占1字节,但这不意味着String s="abc"在内存中只占3字节。应该这么说,String s="abc"至少在内存中占3字节。这是因为char是基本数据类型,而String确是对象类型。对象是一种很复杂的数据类型,你要看一个对象具体占多少字节,可以把这个对象序列化后存入一个文本文件来看它具体占用了多少字节,当然这也不是精确的,因为序列化需要写入少量系统信息,但大致是对的。varchar(10)和char(10)的差别是什么?存储超过时候会发生什么问题呢?这个问题其实也相对经典,我也是整了很久才搞清楚的。在MYSQL5,5以后,varchar(x)x中范其实是存储字段的长度范围,就是一个字符代表一个长度,不管这个字符是汉子还是字符都算是一个长度单位。varchar虽然设置长度值,可是因为varchar是可变的长度类型,也就是当存储的长度小于x时候,其实实际的存储空间不是x而是实际存储的字符长度+一些标示空间。当然如果超过x的长度的话还是会报错的。而char(y)中y的值就是存储空间实际的存储长度,超过这个长度的话就会报错)。用varchar(16)就不要使varchar(256);IP地址使用int类型;固定长度的类型最好使用char,例如:邮编(postcode);能使用tinyint就不要使用smallint,int(tinyint存储大小为一个字节,smallint存储大小为2个字节,int存储大小为4个字节,年龄用tinyint就足够了,tinyint可以表示0~255,用int就浪费了三倍空间。从性能的角度来说,用int会更好点,(int是4字节,刚好是计算机的字长)。从空间的利用上,是该用tinyint,只是,现在的空间不值钱,一般很少会考虑到这个需求了。个人觉得最好用tinyint);最好给每个字段一个默认值,最好不能为null

(4)用合适的字段类型节约空间。如:字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能)。避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效)。少用text类型(尽量使用varchar代替text字段)

(5)、在涉及到金额的时候如果对精度要求不高的情况下可以优先使用float,其次是使用double来进存储。如果对精度要求比较高的情况下最好使用decimal来存储,但是相应的它 的效率没有float和double那么高效。具体使用哪种还是要根据业务的具体需求来选择。

(6)、关于date和datetime的用法,就要看你想要存储时间的精确值了,如果仅仅是想要精确到天的话使用date就可以了(如mysql中出生日期使用date类型),如要要精确到秒一级别的就要使用datetime了。有时候大家使用datetime的使用却只是存储到天的日期单位时,这个时候就会自动添加00:00:00在数据的后面,作为秒一级别的数据。

(7)、int(5)和int(10)的区别是什么?想必大家也很好奇吧,其实5和10其实只是显示长度的却别而已,也就是不管int(x)x的值是什么值,存储数字的取值范围还是int本身数据类型的取值范围,x只是数据显示的长度而已。

4)、数据库中每个字段的规范描述

(1)尽量遵守第三范式的标准(3NF)。表内的每一个值只能被表达一次;表内的每一行都应当被唯一的标示;表内不应该存储依赖于其他键的非键信息

(2)如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建索引

(3)如果字段与其它表的字段相关联,需建索引

(4)如果字段需做模糊查询之外的条件查询,需建索引

(5)除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引

5)、数据库命名规范。采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔,如:tb_freight_template

一个项目一个数据库,多个项目慎用同一个数据库

使用PowerDesigner进行数据库设计并直接把设计好的表导出相应的建表语句的更多相关文章

  1. 【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作

    1.新建学生表 这节课我们来把和数据库以及jdbc相关的内容完成,首先,进行数据库建表.数据库呢,我们采用MySQL数据库,我们可以通过navcat之类的管理工具来轻松建表. 首先,我们得建一个数据库 ...

  2. Java项目专栏之数据库建表

    Java项目专栏之数据库建表 数据库建表前期准备 1. 安装mysql:数据库语言,语法和sql server差不太多,如果习惯于sql server可以不用mysql. 2. 安装navicat:可 ...

  3. SyBase Powerdesigner生成数据库详细表

    工具: Sybase PowerDesigner 15.1 Microsoft SQL Server 2005 第一步概要设计: 打开PowerDesigner软件,设计“概念数据模型”(Concep ...

  4. 使用PowerDesigner进行数据库建模入门

    阅读目录 两种重要模型 创建表和主外键 创建视图和存储过程 生成数据库 PowerDesigner(简称PD)是一种强大的数据库建模工具,使用PD可以创建业务模型,UML类图等,当然最主要的功能是数据 ...

  5. 使用PowerDesigner创建数据库表图文并茂版

    使用PowerDesigner创建数据库表图文并茂版 使用PowerDesigner 建数据库表. 一直很忙,没有时间写东西.这次搞点会声会色的,嘿嘿 此技能为项目经理必备技能. 本次主角: 1.在w ...

  6. 数据库模型设计——历史与版本设计

    在企业数据库设计中,经常会遇到一个需求,就是希望把操作之前的数据保留下来,能够看到操作之前是什么数据,操作之后是什么数据.对于这种需求,我们可以使用保留历史数据或者使用版本来实现. 为了能够保留历史数 ...

  7. 利用powerdesigner反向数据库结构,生成ER图

    参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...

  8. PowerDesigner连接Oracle数据库建表序列号实现自动增长

    原文:PowerDesigner连接Oracle数据库建表序列号实现自动增长 创建表就不说了.下面开始介绍设置自动增长列. 1 在表视图的列上创建.双击表视图,打开table properties — ...

  9. 【转】用PowerDesigner制作数据库升级脚本

    [原创]用PowerDesigner制作数据库升级脚本   很多人使用PD的时候就问有没有制作自动升级脚本的功能.其实是有的. 操作原理: 1.保存原来的版本,另存为apm的文件,生成一个Archiv ...

随机推荐

  1. UML——RUP(Rational Unified Process)

    一.宏观导图 二.论细节 RUP(Rational Unified Process)统一软件过程,是指要达到一个指定的目标而采取的一些系列有序的步骤,其目的是高效.准时地提交一个满足业务需求的软件产品 ...

  2. Java链表(英雄增删查改)

    链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 小结: 1.链表是以节点的方式来存储,是链式存储. 2.每个节点包含 data 域, next 域:指向下一个节点. 3 ...

  3. sh 脚本名字和./脚本名字有什么区别

    sh xxx用 sh 这个shell (sh一般指系统默认shell,比如 bash, ksh, Csh 等都有可能) 来解释和运行 xxx 这个脚本.xxx 文件不必具有可执行属性(chmod +x ...

  4. HDU6434 Count【欧拉函数 线性筛】

    HDU6434 I. Count T次询问,每次询问\(\sum_{i=1}^{n}\sum_{j=1}^{n-1}[gcd(i-j,i+j)=1]\) \(T\le 1e5, n \le 2e7\) ...

  5. Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs

    题目链接:https://codeforces.com/contest/1364/problem/C 题意 给出大小为 $n$ 的非递减数组 $a$,构造同样大小的数组 $b$,使得对于每个 $i$, ...

  6. 【noi 2.7_413】Calling Extraterrestrial Intelligence Again(算法效率--线性筛素数+二分+测时)

    题意:给3个数M,A,B,求两个质数P,Q.使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大.输入若干行以0,0,0结尾. 解法:先线性筛出素数表,再枚举出P,二分出对应 ...

  7. Codeforces Round #644 (Div. 3) D. Buying Shovels (数学)

    题意:商店里有\(k\)个包裹,第\(i\)个包裹中含有\(i\)个物品,现在想要买\(n\)物品,你可以选择某一个包裹购买任意次,使得物品数刚好等于\(n\),求最少的购买次数. 题解:首先,假如\ ...

  8. servlet接口实现类HttpServlet以及开发中一些细节

    1. 但是eclipse不会帮我们改web.xml配置文件,所以我们也要在web.xml文件里面手动改 2. 这个样子的话你在用浏览器访问的时候链接的映射就改成了t_day05,这个主要用于你建立完一 ...

  9. spring-cloud-netflix-hystrix-turbine

    Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数 ...

  10. ysoserial Commons Collections2反序列化研究

    Apache Commons Collections2反序列化研究 环境准备 JDK 1.7 Commons Collections 4.0 javassit 前置知识 PriorityQueue() ...