Data Modelling

20th August 2020 at 2:19pm

数据库建模。一般分三层:

  1. Conceptual: This Data Model defines WHAT the system contains. This model is typically created by Business stakeholders and Data Architects. The purpose is to organize, scope and define business concepts and rules.
  2. Logical: Defines HOW the system should be implemented regardless of the DBMS. This model is typically created by Data Architects and Business Analysts. The purpose is to developed technical map of rules and data structures.
  3. Physical: This Data Model describes HOW the system will be implemented using a specific DBMS system. This model is typically created by DBA and developers. The purpose is actual implementation of the database.

这里只关注 physical 这一层,涉及到建表、字段、约束等。

图表一般分为 ER 图和 UML 图两类。ER 图是更合适现代软件开发的。

工具

参考这篇 V2EX 帖子,大多数人的实践是:

  • 大型的、多表的数据建模,用 StarUML / PowerDesigner
  • 小型的,有几种方式:
    • 直接在 SQL 工具(如 HeidiSQL / MySQL Workbench)中建表
    • 用 ORM 写 Model 字段自动建表
    • 裸写 SQL 建表

HeidiSQL 很受推荐,可能功能强大且易用。

我调研过的一些选择:

  • SqlDBM:网页版,UI 上流,功能不错。除基础功能外提供的能力有:写表格及字段备注、生成 SQL、反向从 SQL 解析。价格很贵。
  • Navicat:Navicat Premium 中有 data modelling 能力。看起来不错,但是它在 Linux 上的 UI 不太能用。非常贵

实践

个人觉得不复杂的业务没必要用专门的 data modelling 工具。可以考虑:

  • 直接在 ORM(如 Django Models)中写对象,再生成对应图表即可。可能效果不如专业 ER 图软件。合适的工具有 PyCharm 中的 Python Class Diagram,django-extensions 中的 graph models 功能
  • 直接通过 DB schemas 生成 ER 图,供理解