核心概念
- 字典类型 (DictType): 定义一组相关的字典项。例如:“性别”、“订单状态”、“用户角色”、“产品分类”。
- 字典项 (DictItem): 某个字典类型下的具体条目。例如,“性别”类型下有“男”、“女”、“未知”。每个字典项通常包含一个实际存储值(value)和一个显示标签(label)。
一、数据库设计
我们将设计两张核心表:
-
dict_type (字典类型表)
字段名 类型 约束/描述 例子 id BIGINT 主键, 自增 1 type_code VARCHAR(50) 唯一键, 字典类型编码,供程序调用 GENDER, ORDER_STATUS type_name VARCHAR(100) 字典类型名称,供展示 性别, 订单状态 description VARCHAR(255) 描述 (可选) is_system BOOLEAN 是否系统内置 (系统内置的通常不允许用户删除) true status TINYINT 状态 (0: 禁用, 1: 启用) 1 created_at TIMESTAMP 创建时间 updated_at TIMESTAMP 更新时间 -
dict_item (字典项表)
字段名 类型 约束/描述 例子 id BIGINT 主键, 自增 101 type_id BIGINT 外键, 关联 dict_type.id 1 (关联到 dict_type 的性别) type_code VARCHAR(50) 冗余字段, 关联 dict_type.type_code, 方便查询 GENDER item_value VARCHAR(100) 字典项值 (实际存储在业务表中的值) MALE, FEMALE, 1, PROCESSING item_label VARCHAR(100) 字典项标签 (显示给用户看的值) 男, 女, 启用, 处理中 item_sort INT 排序号 (值越小越靠前) 1, 2 css_class VARCHAR(50) CSS类名 (可选, 用于前端特殊样式) tag-red, status-success description VARCHAR(255) 描述 (可选) status TINYINT 状态 (0: 禁用, 1: 启用) 1 created_at TIMESTAMP 创建时间 updated_at TIMESTAMP 更新时间 二、其他表引用问题
这里就存在一个问题,假设我有一张表,引用了不同的字典属性,这个是存id呢还是value呢?
比如: 男、女; 身份证、健康证
见过很多种设计:有存id和value的、存id的、存value的(若依)请问如果从id和value选一个方案,哪个更好?坑更少? 欢迎大佬们指教