使用PowerDesigner用来数据库建模:
概念模型---> 物理模型 ---> 生成表 ----> 实体类/映射文件(逆向工程)
概要模型:实体和实体之间的关系
物理模型:表与表之间的关系
注:有些公司会跳过概念模型,直接从物理模型开始,是因为他们已经确定好了数据库,但是我推荐从概要模型开始到时候无论 用哪个数据库都可以随意切换生成物理模型。
注:只要把概念模型设计准确了,无论映射文件多么复杂都不需要你去写了
图一:创建概要模型
Entity: 实体
relationship 一般的实体关系都可以使用,如果实体之间的关系指定为多对多,那么在生成pdm时则自动会生成一个以2个实体主键联合起来作为联合主键的一张新的关系表
inheritance 实体之间的继承关系,如:员工——领导
association 关系,如角色与人员存在多对多关系叫做:人员角色,这个关系里面还可能有是否、状态等。
association link 用于连接实体和关系
link/extended dependency 实体或关系的额外信息,信息比较独立;不会产生主外键关系
需求:
机构:
部门:一个机构有多个部门
人员:一个部门下有多个人员,一个人员有多个角色 特殊:领导也是人员,有职位信息(继承人员)
角色:一个角色可以被多个人员使用
权限:一个角色有多个权限,一个权限也可以被多个角色使用
为上述需求设计出来的概念模型
根据概念模型生成物理模型
生成了物理模型:就是表和表直接的关系了
可以双击进去查看一下建表语句或者设置主键
根据物理模型生成建表语句
然后拿到crebas.sql中的内容
/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 2020/5/3 18:21:21 */
/*==============================================================*/
drop table if exists r_emp_role;
drop table if exists r_role_privilege;
drop table if exists t_dept;
drop table if exists t_emp;
drop table if exists t_leader;
drop table if exists t_org;
drop table if exists t_privilege;
drop table if exists t_role;
/*==============================================================*/
/* Table: r_emp_role */
/*==============================================================*/
create table r_emp_role
(
role_id varchar(32) not null,
emp_id varchar(32) not null,
state int,
primary key (role_id, emp_id)
);
/*==============================================================*/
/* Table: r_role_privilege */
/*==============================================================*/
create table r_role_privilege
(
role_id varchar(32) not null,
privilege_id varchar(32) not null,
primary key (role_id, privilege_id)
);
/*==============================================================*/
/* Table: t_dept */
/*==============================================================*/
create table t_dept
(
dept_id varchar(32) not null,
org_id varchar(32) not null,
name varchar(50) not null,
primary key (dept_id)
);
/*==============================================================*/
/* Table: t_emp */
/*==============================================================*/
create table t_emp
(
emp_id varchar(32) not null,
dept_id varchar(32) not null,
name varchar(50) not null,
primary key (emp_id)
);
/*==============================================================*/
/* Table: t_leader */
/*==============================================================*/
create table t_leader
(
emp_id varchar(32) not null,
dept_id varchar(32),
name varchar(50) not null,
position varchar(50),
primary key (emp_id)
);
/*==============================================================*/
/* Table: t_org */
/*==============================================================*/
create table t_org
(
org_id varchar(32) not null,
name varchar(50) not null,
primary key (org_id)
);
/*==============================================================*/
/* Table: t_privilege */
/*==============================================================*/
create table t_privilege
(
privilege_id varchar(32) not null,
name varchar(50) not null,
primary key (privilege_id)
);
/*==============================================================*/
/* Table: t_role */
/*==============================================================*/
create table t_role
(
role_id varchar(32) not null,
name varchar(50) not null,
primary key (role_id)
);
alter table r_emp_role add constraint FK_r_emp_role foreign key (role_id)
references t_role (role_id) on delete restrict on update restrict;
alter table r_emp_role add constraint FK_r_emp_role2 foreign key (emp_id)
references t_emp (emp_id) on delete restrict on update restrict;
alter table r_role_privilege add constraint FK_Have foreign key (privilege_id)
references t_privilege (privilege_id) on delete restrict on update restrict;
alter table r_role_privilege add constraint FK_belong foreign key (role_id)
references t_role (role_id) on delete restrict on update restrict;
alter table t_dept add constraint FK_r_org_dept foreign key (org_id)
references t_org (org_id) on delete restrict on update restrict;
alter table t_emp add constraint FK_r_dept_emp foreign key (dept_id)
references t_dept (dept_id) on delete restrict on update restrict;
alter table t_leader add constraint FK_Inheritance_1 foreign key (emp_id)
references t_emp (emp_id) on delete restrict on update restrict;
复制到navicat中,执行完之后生成表,最后在使用逆向工程搞定(hibernate-tools)
在navicat上面的工具-->命令行界面,然后执行sql就创建表了