8|数据库设计:怎样按领域模型设计数据库?

这节课,我们来学习数据库设计。

前面我们说过,模型驱动设计可以分成两大部分:模型的建立和模型的实现。模型的建立要求模型和业务需求一致,模型的实现要求实现和模型一致。现在,咱们已经建立了领域模型,并且从理论层面对模型驱动设计的概念进行了总结,这些都属于模型的建立。而我们这节课要做的数据库设计,则属于模型的实现。

那么,怎样由领域模型,一步一步地推导出数据库的设计呢?这种方法和以前的方法有什么不同呢?这节课我们就来讨论这两个问题。在这个过程中,我们要着重体会数据库设计是如何与领域模型保持一致的。

今天讲的内容,在软件工程中叫做建立物理数据模型(physical data model, PDM),主要目的就是对数据表进行设计。具体来说,包括以下几点:

建立哪些表;

表中有哪些字段;

表的主键和外键是什么;

字段的数据类型以及约束。

还有一点要说明,虽然我们的例子是用 MySQL 完成的,但我们讲的是通用原理,所以采用其他数据库引擎的话,道理也是一样的。

我们在领域建模的时候把模型分成了四个模块,下面,我们就一个模块一个模块地进行数据库设计。

8|数据库设计:怎样按领域模型设计数据库?_第1张图片

“租户管理”的数据库设计

咱们就从最简单的租户管理模块开始吧,下面是这个模块的模型图:

8|数据库设计:怎样按领域模型设计数据库?_第2张图片

一般来说,一个实体可以映射为一个数据库表。所以,咱们可以先根据租户实体设计出租户表。可以用下面的符号表示:

8|数据库设计:怎样按领域模型设计数据库?_第3张图片

前面说过,今天的内容,是建立物理数据模型。和 UML 不同,物理数据模型的图示法并没有统一的国际标准。所以不同的专家、不同的工具,画出来的都不太一样。这里我用了绘图工具(draw.io)中提供的符号。

另外,还可以用建表语句(create table) 表示表的结构。建表语句和图形符号是同一个意思的两种等价的表示方法,比如上图可以直接翻译成下面的建表语句:

CREATE TABLE tenant ( id INT PRIMARY KEY );

所以,原则上直接用建表语句进行数据库设计也是可以的。不过为了直观,我们的课程中还是用图示的方法。

下面我们仔细看看表示数据表的符号。

首先看这个符号的第一行,这里的 tenant 是表的名称。在领域建模阶段,为了和领域专家进行沟通,模型中使用的都是中文。但建表时,一般要用英文来命名。那问题就来了,怎么保证中英文的一致,从而在实现层面贯彻统一语言呢?

答案就是使用我们前面建的词汇表。在词汇表里,我们规定了每个中文词汇对应的英文全称和简称。在为数据库表以及字段等命名时,如果词汇表中有简称就用简称,否则

你可能感兴趣的:(DDD,数据库,oracle)