通用基础表逻辑设计(二)——扩展字段
一、扩展字段表
一个表的字段可能并非一成不变,系统的运行、需求的变化等客观条件可能会需要增加其他字段,如何在不直接修改表设计的前提下满足需求呢?该扩展字段表的思想就是将列设计转化为行设计,字段的增加表现为记录的增加。当然这种方式也不是万能的,对于需要排序、查询和索引的字段最好还是通过添加表字段的方式增加。
字段名称 | 数据类型 | 属性 | 允许空 | 默认值 | 备注 |
ext_id | int (4) | PK AI | 扩展字段编号 | ||
ext_guid | char (36) | newid() | 扩展字段GUID | ||
ext_table | varchar (50) | '' | 扩展字段关联表名 | ||
ext_code | varchar (50) | '' | 扩展字段编码 | ||
ext_name | nvarchar (100) | '' | 扩展字段名称 | ||
ext_desc | nvarchar (200) | '' | 扩展字段描述 | ||
ext_order | int (4) | 0 | 扩展字段序号 | ||
ext_necessary | int (4) | 0 | 扩展字段是否必需 | ||
ext_data_len | int (4) | 0 | 扩展字段数据长度 | ||
ext_data_type | varchar (50) | '' | 扩展字段数据类型 | ||
ext_form_type | varchar (50) | '' | 扩展字段表单类型 | ||
ext_form_url | varchar (300) | '' | 扩展字段数据来源URL | ||
ext_data_regex | varchar (100) | '' | 扩展字段正则表达式 | ||
ext_data_tip | varchar (100) | '' | 扩展字段提示 | ||
ext_state | int (4) | 1 | 扩展字段状态 |
表1:base_extension(扩展字段表)
二、扩展字段值表
上述方式实现的字段的动态增加,那字段的值该如何保存呢?当然通过另一个新表来存储。
字段名称 | 数据类型 | 属性 | 允许空 | 默认值 | 备注 |
prop_id | int (4) | PK AI | 属性编号 | ||
ext_code | varchar (36) | '' | 扩展字段编码 | ||
ext_guid | varchar (36) | '' | 扩展字段GUID(冗余) | ||
ext_table | varchar (50) | '' | 扩展字段表名(冗余) | ||
object_guid | varchar (36) | '' | 对象GUID | ||
prop_value | nvarchar (4000) | '' | 属性值 |
表2:base_property(扩展字段值表)
三、综述
比如一个商家表,设计之初已添加商家编号、商家GUID、商家名称、商家地址、商家电话等字段,后期又需要增加营业时间、所在区域、商家优惠说明等扩展字段,使用上述两个表可以提升系统的可扩展性和可配置性。