优秀的编程知识分享平台

网站首页 > 技术文章 正文

软件开发中的码表管理(软件开发中的码表管理是指)

nanyue 2024-08-04 17:15:15 技术文章 11 ℃

码表其实是“编码表”的简称。系统编码是一项重要的管理工作,会有大量的基础数据是基于编码表的。

码表(Code Table 或 Lookup Table)是一种用于存储和管理固定数据集合的数据结构。这些集合通常包含一系列预定义的值,这些值代表了系统中的某些状态、类别或其他固定的选项。

软件开发中码表很常见,例如下图中的数据,就可以改造为码表管理,实际上数据量远远不止这些:



推荐使用码表

使用码表在软件开发中有许多好处,尤其是在处理固定数据集和需要频繁更新的配置数据时。

  1. 码表统一:确保前后端使用相同的码值,避免了数据不一致的问题。前后端减少了数据转换的工作量。
  2. 可以确保在整个系统中使用一致的数据值,避免了数据冗余和不一致性的问题。
  3. 在不修改代码的情况下更改系统的某些行为或配置。当需要更新或调整码值时,只需更新码表即可,无需重新编译或部署代码。
  4. 将固定的值集中存储在一个地方,可以更容易地更新这些值。在多模块、大型复杂度高的系统中,码表管理简化了维护和升级的过程。
  5. 可通过缓存码表数据,提高系统的性能,减少了对数据库的查询次数。
  6. 可以动态满足不同的部署环境(如开发、测试、生产)的要求。
  7. 通过码表管理,可以更容易地为了解各种配置含义和用途。
  8. 通过版本控制码表数据,可以跟踪历史更改,审计和回滚。对于入职新人了解系统状态结构也比较友好。


码值管理模块设计(仅供参考)

表名 :code_tables

字段定义

  • id (INT, 主键, 自增) - 唯一标识每个码表条目。
  • code (VARCHAR) - 码表条目的唯一编码。
  • name (VARCHAR) - 码表条目的名称。
  • status (ENUM('ACTIVE', 'INACTIVE')) - 码表条目的状态。
  • created_at (DATETIME) - 记录码表条目创建的时间戳。
  • created_by (INT) - 创建人的用户ID。
  • updated_at (DATETIME) - 记录码表条目最后更新的时间戳。
  • updated_by (INT) - 最后更新人的用户ID。
  • mnemonic (VARCHAR) - 助记码,用于快速记忆或查找。
  • data_domain (VARCHAR) - 数据域,用于分类或分组码表条目。
  • tenant_id (INT) - 租户ID,用于区分不同租户的数据。
  • description (TEXT) - 描述或备注。
  • start_date (DATE) - 码表条目生效的开始日期。
  • end_date (DATE) - 码表条目失效的结束日期。
  • scope (ENUM('GLOBAL', 'TENANT')) - 表示码表条目的作用范围,是全局还是租户级别的。

SQL 创建语句

CREATE TABLE code_tables (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '唯一标识',
    code VARCHAR(255) NOT NULL COMMENT '码表条目的唯一编码',
    name VARCHAR(255) NOT NULL COMMENT '码表条目的名称',
    status ENUM('ACTIVE', 'INACTIVE') NOT NULL DEFAULT 'ACTIVE' COMMENT '码表条目的状态',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录码表条目创建的时间戳',
    created_by INT NOT NULL COMMENT '创建人的用户ID',
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录码表条目最后更新的时间戳',
    updated_by INT NOT NULL COMMENT '最后更新人的用户ID',
    mnemonic VARCHAR(255) NOT NULL COMMENT '助记码,用于快速记忆或查找',
    data_domain VARCHAR(255) NOT NULL COMMENT '数据域,用于分类或分组码表条目',
    tenant_id INT NOT NULL COMMENT '租户ID,用于区分不同租户的数据',
    description TEXT NOT NULL COMMENT '描述或备注',
    start_date DATE NOT NULL COMMENT '码表条目生效的开始日期',
    end_date DATE COMMENT '码表条目失效的结束日期',
    scope ENUM('GLOBAL', 'TENANT') NOT NULL DEFAULT 'GLOBAL' COMMENT '表示码表条目的作用范围,是全局还是租户级别的',
    UNIQUE (code, data_domain, tenant_id, scope)
) COMMENT='码表管理表';

全局码

INSERT INTO code_tables (code, name, status, created_by, updated_by, mnemonic, data_domain, tenant_id, description, start_date, scope)
VALUES ('COUNTRY_CODE', 'Country Codes', 'ACTIVE', 1, 1, 'CC', 'geography', 0, '国家编码', '2024-01-01', 'GLOBAL');

INSERT INTO code_tables (code, name, status, created_by, updated_by, mnemonic, data_domain, tenant_id, description, start_date, scope)
VALUES ('PRODUCT_CATEGORY', 'Product Categories', 'ACTIVE', 1, 1, 'PC', 'product', 0, '产品分类', '2024-01-01', 'GLOBAL');

租户自定义码

INSERT INTO code_tables
(code, name, status, created_by, updated_by, mnemonic, data_domain, tenant_id, description, start_date, scope)
VALUES ('ORDER_STATUS', 'Order Statuses for Tenant 1', 'ACTIVE', 1, 1, 'OS', 'order', 1, '租户1的订单状态', '2024-01-01', 'TENANT');

INSERT INTO code_tables (code, name, status, created_by, updated_by, mnemonic, data_domain, tenant_id, description, start_date, scope)
VALUES ('PAYMENT_METHOD', 'Payment Methods for Tenant 2', 'ACTIVE', 2, 2, 'PM', 'payment', 2, '租户2的支付方式', '2024-01-01', 'TENANT');

查询所有全局码

SELECT * FROM code_tables WHERE tenant_id = 0;

特定租户的码

SELECT * FROM code_tables WHERE tenant_id = 1;

特定状态的码

SELECT * FROM code_tables WHERE status = 'ACTIVE';


具体实践中

以上仅供参考,实际开发中根据自己的业务灵活调整。例如:码值到期时间,码值备注字段,码值扩展json值,拼音码等等。


有一些细节也是需要注意的

  1. 唯一性约束,使用复合唯一键来确保码表条目的唯一性。
  2. 对于敏感数据,考虑使用加密技术来保护数据安全。
  3. 引入版本管理机制,以便跟踪更改历史和回滚到之前的状态。记录每次变更的时间戳、变更内容及变更人,以便审计和恢复。
  4. 使用缓存来存储频繁访问的码表数据,减少数据库查询次数,码值通常不会频繁变动。
  5. 明确区分全局码表条目和租户自定义码表条目。
  6. 数据字典添加的时候要明确每个字段的意义、用途和数据类型,注释完整。
  7. 设计良好的码值管理服务,确保各个模块模块或其他系统组件之间的交互正常,码值统一。例如:提供 RESTful API 来支持前端和第三方系统与码表管理模块的交互。

其他暂时没想到,欢迎补充。

Tags:

最近发表
标签列表