在设计复杂系统或数据库时,对实体进行分类可以帮助我们更好地理解它们的作用和功能,从而提高设计的结构性、可维护性和可追溯性。
以下是实体的一些常见分类:
- 记录型实体(Record-based Entities)
- 事务型实体(Transaction-based Entities)
- 日志型实体(Log-based Entities)
- 历史型实体(History-based Entities)
- 配置型实体(Configuration-based Entities)
记录型实体(Record-based Entities)
反映长期存在且具有相对稳定状态的数据实体。这类实体通常表示核心的业务对象,并且它们的生命周期较长。
例如:
- 用户(User):代表系统中的注册用户或个人,具有唯一的身份标识符和相关信息,如姓名、联系方式等。
- 账户(Account):金融机构中的银行账户或应用中的用户账户,记录长期状态如余额、账户信息等。
- 产品(Product):电商平台中的商品,描述着产品的规格、价格、库存等信息。
- 项目(Project):在管理系统中的项目实体,用于跟踪长期存在的任务或工作目标。
特点:
- 记录型实体通常具有唯一标识符(例如用户ID、账户号码、产品编号等),用于唯一标识每个对象。这些标识符可以方便地用于引用、查询和管理该实体。
- 在其生命周期中,数据可能会更新,但频率通常不高。例如,用户信息可能会因联系方式变更而更新,但不会频繁变化。
- 反映业务的核心对象,是业务运作的基础。通常与其他实体或模块有密切关联。
事务型实体(Transaction-based Entities)
事务型实体是用于描述在业务系统中具有动态过程和状态变化的数据实体。它们通常用于跟踪和记录特定的业务流程,并随着事务的推进而更新状态。
例如:
- 订单(Order):从创建到
待支付
、待发货
、已完成
等多个状态。 - 付款(Payment):从
待发起
、处理中
到已成功
、已失败
等状态。 - 申请(Application):某角色提交申请后,申请状态可能经历
待审查
、已批准
或已拒绝
等状态。
特点:
- 每条记录通常代表一次特定的业务操作或流程,如一次订单交易、一次付款行为或一次申请过程。
- 具有明确的生命周期和状态,清晰的开始和结束状态。通过不同的业务事件推动状态变化。
- 数据可能在短期内频繁更新,但一旦事务完成,记录通常不再变化。
日志型实体(Log-based Entities)
用于记录系统中发生的事件、活动或操作,通常是按时间顺序排列。可用于监控、调试、审计和分析系统行为。
例如:
- 用户活动日志(UserActivityLog):跟踪用户在系统中的操作,如登录、浏览、操作等活动。
- 错误日志(ErrorLog):记录系统中发生的异常、错误或故障,便于后续分析和问题排查。
特点:
- 新事件发生时,数据按时间顺序追加(Append-only)到日志中。几乎不涉及更新或删除操作,数据为一次性写入,后续不再修改。
- 每条日志记录通常都会包含一个明确的时间戳,用于标记事件发生的时间。此外,还可能包含事件的来源、类型、发生的上下文等信息。
- 可能会定期归档旧日志或者清理过期数据。
历史型实体(History-based Entities)
用于保存实体或其字段在其生命周期内的多个状态或版本,记录着随时间的演变。
例如:
- 账户余额流水(AccountBalanceHistory):记录账户余额的变化情况,包括交易金额、交易后余额、交易类型等。
- 产品价格历史(ProductPriceHistory):记录每个产品的价格变动,包括调整日期和调整原因。
特点:
- 一旦历史记录被创建,通常不允许修改。
- 支持查询和追溯实体或字段在任意时间点的状态。
配置型实体(Configuration-based Entities)
配置型实体可分为以下 3 种表现形式:
- 常量形式
- 参数形式
- 关联形式
常量形式
用于存储有限的、离散的值集,来定义业务中的某些可选项或状态。
例如:
- 角色(Role):例如 管理员、用户、访客 等。
- 支付方式(PaymentMethod):例如 信用卡、借记卡、PayPal、支付宝、微信 等。
- 国家/地区代码(CountryCode):例如 CN(中国)、US(美国)、JP(日本)等。
特点:
- 记录同一类配置的不同值。
- 数据相对静态,通常只会添加新值或修改描述。
- 通过提供一组预定义的选项来防止错误输入,确保系统中使用的一致的常量值。
- 常用于其他实体的属性字段作为引用。
参数形式
记录比较核心的、系统或业务级别的配置项。这些配置项会影响系统的功能、性能或行为。
例如:
- 用户偏好(UserPreference):存储与每个用户相关的个性化设置,如主题颜色、语言选择、通知偏好等。
- 系统设置(SystemSetting):定义整个系统的全局设置和约束,例如最大文件上传大小、密码复杂性规则、系统维护时间段等。
- 定价策略(PricingStrategy):如不同用户组的折扣率设置、定制的销售税率等。
特点:
- 每个字段代表一个特定的配置项。
- 扩展配置时需要新增实体或新增字段。
关联形式
用于表示两个或多个实体之间的关系,并通过这种关联来实现某些配置需求。
例如:
- 用户角色(UserRole):表示用户与角色之间的映射,例如一个用户可以同时是管理员和访客,一个角色可以被分配给多个用户。
- 产品分类(ProductCategory):定义产品与类别的关系,多个产品可以属于不同的类别,一个类别下可以包含多个产品。
特点:
- 这些实体不独立存在,而是基于其他主实体之间的关联形成的 “桥表(Bridge Table)”。
常见问题
日志型实体与历史型实体的区别
- 日志型实体 是一系列独立的操作记录,通常为了监控、调试而记录的,几乎不发生数据修改。
- 历史型实体 则更关注某个核心实体随时间的状态演变,记录的是一个实体不同时间点的状态。
进一步思考
- 一个实体可能叠加不同类型
- 不同类型之间的演变关系