逻辑模型 vs 物理模型 核心区别(结合C#、ORM、数据库讲解)

逻辑模型 vs 物理模型 核心区别(结合C#、ORM、数据库讲解)

一、一句话核心差异

  • 逻辑模型:只关心业务、程序层面的数据结构,和数据库无关;
  • 物理模型:关心数据在硬盘上怎么存,完全绑定具体数据库(SQLite/SQLServer)。

二、全方位对比表格

对比维度 逻辑模型 物理模型
设计目标 描述业务实体、属性、实体之间的关系 把逻辑结构翻译成数据库真实存储结构
关注点 业务含义、字段作用、一对多/多对多关联、业务非空校验 字段类型、长度、主键、自增、索引、字符集、默认值、表名
是否依赖数据库 完全不依赖,换数据库不用改逻辑模型 强依赖,SQLite和SQLServer语法不一样,物理结构要改
典型载体 纯C#实体类、DTO、领域Model、无数据库标记 建表SQL、ORM带映射特性的实体、数据库索引脚本
数据类型写法 只写通用类型:long、string、DateTime 数据库专属:BIGINT、VARCHAR(20)、DATETIME
有无存储优化设计 无(不考虑性能、索引) 有:普通索引、唯一索引、分表、分区
变更影响 业务逻辑变更才会修改 换数据库、优化性能、调整字段长度都会修改

三、代码实例直观区分

1. 纯逻辑模型(只写业务,无任何数据库信息)

// 逻辑模型:只定义业务属性和关联,不关心数据库怎么存
public class Operator
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string Pwd { get; set; }
    public DateTime CreateTime { get; set; }
    // 一对多业务关系
    public List<OperateLog> Logs { get; set; }
}

特点:看不到表名、字段长度、主键标记,这段代码放到任何数据库都不用改。

2. 物理模型(增加数据库存储细节)

// 物理层映射,绑定SQLite存储规则
[SugarTable("tb_operator")] // 数据库真实表名
public class Operator
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] // 物理主键、自增
    public long Id { get; set; }

    [SugarColumn(Length = 20, IsNullable = false)] // varchar(20) 不允许为空
    public string Name { get; set; }

    [SugarColumn(Length = 64, IsNullable = false)]
    public string Pwd { get; set; }

    [SugarColumn(DefaultValue = "CURRENT_TIMESTAMP")] // 数据库默认值
    public DateTime CreateTime { get; set; }
}

配套物理产物(建表SQL):

CREATE TABLE tb_operator(
    Id BIGINT PRIMARY KEY AUTOINCREMENT,
    Name VARCHAR(20) NOT NULL,
    Pwd VARCHAR(64) NOT NULL,
    CreateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_name ON tb_operator(Name);

四、关键区别总结

  1. 粒度区别
    逻辑只定义“有什么字段”;物理定义“这个字段占多大空间、用什么类型、要不要建索引”。

  2. 复用性区别
    逻辑模型通用,MySQL、SQLite、SQLServer一套实体都能用;
    物理模型和数据库绑定,换库就要调整长度、自增、字段类型。

  3. 职责分层(开发规范)

  • 业务层、DTO、领域实体 = 逻辑模型,只处理业务;
  • ORM映射配置、数据库表、索引 = 物理模型,只处理存储。
  1. 冗余与范式
    逻辑模型只遵守业务三范式;
    物理模型为了性能可以打破范式(冗余字段)、增加索引。

五、最简单记忆口诀

逻辑:只管业务数据长啥样;
物理:管数据库硬盘怎么存。

posted @ 2026-06-16 14:42  人生就是修炼  阅读(11)  评论(0)    收藏  举报