一、建模的流程
1. 概念模型阶段。
一般来说,概念模型阶段的主要任务是,通过5w1h的方法不断与客户沟通,搞清楚核心需求,这个项目的商业目的,都有哪些参与人员,人员角色是什么?都有哪些参与物件?行业常识。只要一张图搞定,花费时间应该在总项目时间的10%.
2. 逻辑模型阶段
实体定义和重要属性,比如客户、商品。实体之间的关系购买。占据项目的60%-70%的时间。如果实体超过100个,需要定义术语表。逻辑模型像一本书,需要生成数据字典。
3. 物理模型阶段
实体的所有的属性定义,关系的所有属性的定义,数据库的版本等都要确定。可以通过物理模型直接生成表。
二、核心概念
1. 实体。概念比较好理解,比如老师 教 课, 老师和课都是实体,实体通常是名词。教则是两个实体之间的关系。
2. 实体的属性。比较好理解,需要注意的是,实体的属性中通常会加入create_time和update_time属性,方便后期的统计,数据采集等工作。
3. 实体之间的关系。关系通常是动词,比如老师教课的教。需要注意的是,在梳理实体之间的关系的时候,需要确定是一对一,一对多,多对一,还是多对多的关系。通常采用四个问题来确定,还是以老师教课的例子来说明。
(1)一个老师是否教多门课程? ——可以
(2)一门课程是否多个老师来教? ——可以
前面两个问题可以确定多对多的关系
(3)是不是没位老师一定要教课? ——不一定
(4)每一门课程是不是一定要老师教? ——一定
三、逻辑模型和物理模型
1. 今天的内容非常简单,直接在最后给出概念模型、逻辑模型和物理模型,并通过物理模型直接生成sql语句。
2. 直接使用物理模型生成三张表的sql
drop table if exists teacher;
/*==============================================================*/
/* Table: teacher */
/*==============================================================*/
create table teacher
(
teacher_id char(10) not null,
teacher_name char(10),
primary key (teacher_id)
);
drop table if exists course;
/*==============================================================*/
/* Table: course */
/*==============================================================*/
create table course
(
course_id char(10) not null,
course_name char(10),
primary key (course_id)
);
drop table if exists teach;
/*==============================================================*/
/* Table: teach */
/*==============================================================*/
create table teach
(
course_id char(10) not null,
teacher_id char(10) not null,
primary key (course_id, teacher_id)
);
alter table teach add constraint FK_teach foreign key (course_id)
references course (course_id) on delete restrict on update restrict;
alter table teach add constraint FK_teach2 foreign key (teacher_id)
references teacher (teacher_id) on delete restrict on update restrict;