数据库自定义字段及相关检索
2010-03-31 17:22
316 查看
应用开发过程中,有时候会有用户可以自定义字段的要求。比如我们对于人员信息的维护提供了姓名,性别,出生日期,备注等基本信息,但客户可能希望自己可以自定义一些字段来保存特定的信息,并对这些信息进行检索。
这个时候通常可能有两个方案:
1、对原有人员表增加若干备用字段,由用户来定义其含义;
2、增加表,来存储自定义字段结构以及相应数据。
在不同的背景情况下,两个方案各有优缺点,方案2的优点是可以方便的扩展,满足所有表增加自定义字段的需求。
这里描述方案2的一个实现。
假设有如下表TableA:
现在希望可以添加多个自定义字段,所以在数据库中增加以下两个表:
说明:用于存储用户自定义的字段
TableName:自定义所属表的名称
FieldLable:自定义字段在界面上显示的名称
FieldName:用于描述自定义字段的名称,用于SQL操作字段别名,非必要字段
FieldType:描述字段的类型,用于控制界面上控件的操作行为。比如如果是Date类型,则可以控制用户只能输入日期格式的信息
说明:用于存储所有自定义字段的数据
EntityID:主表的ID,这里对应TableA表中某条记录的Id
Field点:自定义字段的ID,这里对应CustomField表中的Id
data:用于存储自定义字段的内容
以上结构及数据表示TableA这张表有两个自定义字段,其中“张三”这条数据的两个自定义字段都已经填写数据,“李四”这条数据只填写了一个自定义数据。
假设查询条件为:
姓名:张三
自定义1:abc
自定义2:g
查询SQL:
1、检索自定义字段列表:
该语句将检索出TableA的所有自定义字段信息。
2、自定义字段联合查询(一个自定义字段的情况):
检索结果如下:
3、自定义字段联合查询(两个自定义字段的情况):
检索结果如下:
4、检索主表及所有自定义字段信息:
检索结果如下:
这个时候通常可能有两个方案:
1、对原有人员表增加若干备用字段,由用户来定义其含义;
2、增加表,来存储自定义字段结构以及相应数据。
在不同的背景情况下,两个方案各有优缺点,方案2的优点是可以方便的扩展,满足所有表增加自定义字段的需求。
这里描述方案2的一个实现。
假设有如下表TableA:
TableA | ||
Id | Name | Address |
1 | 张三 | 沈阳 |
2 | 李四 | 丹东 |
3 | 王五 | 大连 |
CustomField | ||||
Id | TableName | FiledLable | FiledName | FieldType |
1 | TableA | 自定义1 | F1 | varchar |
2 | TableA | 自定义2 | F2 | varchar |
3 | TableB | 自定义3 | F3 | Date |
4 | TableB | 自定义4 | F4 | Number |
TableName:自定义所属表的名称
FieldLable:自定义字段在界面上显示的名称
FieldName:用于描述自定义字段的名称,用于SQL操作字段别名,非必要字段
FieldType:描述字段的类型,用于控制界面上控件的操作行为。比如如果是Date类型,则可以控制用户只能输入日期格式的信息
FieldData | |||
Id | EntityID | FieldId | data |
1 | 1 | 1 | abc |
2 | 1 | 2 | efg |
3 | 2 | 1 | bcd |
EntityID:主表的ID,这里对应TableA表中某条记录的Id
Field点:自定义字段的ID,这里对应CustomField表中的Id
data:用于存储自定义字段的内容
以上结构及数据表示TableA这张表有两个自定义字段,其中“张三”这条数据的两个自定义字段都已经填写数据,“李四”这条数据只填写了一个自定义数据。
假设查询条件为:
姓名:张三
自定义1:abc
自定义2:g
查询SQL:
1、检索自定义字段列表:
select id,fieldName,fieldLable,fieldType from CustomField where TableName='TableA' order by Id
该语句将检索出TableA的所有自定义字段信息。
2、自定义字段联合查询(一个自定义字段的情况):
select a.*,fd1.data as F1,fd2.data as F2 from TableA a left outer join (select entityId,data from fieldData where fieldId=1) fd1 on a.id=fd1.entityId left outer join (select entityId,data from fieldData where fieldId=2) fd2 on a.id=fd2.entityId where a.name like '%张三%' and fd1.data like '%abc%';
检索结果如下:
3、自定义字段联合查询(两个自定义字段的情况):
select a.*,fd1.data as F1,fd2.data as F2 from TableA a left outer join (select entityId,data from fieldData where fieldId=1) fd1 on a.id=fd1.entityId left outer join (select entityId,data from fieldData where fieldId=2) fd2 on a.id=fd2.entityId where a.name like '%张三%' and fd1.data like '%abc%' and fd2.data like '%g%' ;
检索结果如下:
4、检索主表及所有自定义字段信息:
select a.*,fd1.data as F1,fd2.data as F2 from TableA a left outer join (select entityId,data from fieldData where fieldId=1) fd1 on a.id=fd1.entityId left outer join (select entityId,data from fieldData where fieldId=2) fd2 on a.id=fd2.entityId
检索结果如下:
相关文章推荐
- Log4Net 自定义字段记录到数据库
- Log4Net 添加自定义字段并保存到数据库
- aop log4j mdc实现自定义字段存入数据库
- 删除数据库中相关表中含有某字段值为XXX的数据,把数据库相关表中某字段的值统一修改为XXX
- 将空值转换为数据库字段的NULL形式(数据库自定义查询 十分重要)
- Log4net 自定义信息(字段)存入数据库
- visual studio 2013 Entity Framework 6 MVC 5 体验(一)修改默认数据库,增加自定义字段
- JSP自定义标签——调用数据库(通过id号搜索相关信息)
- Log4net 自定义字段到数据库
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 自定义数据库物理表中各列字段的名称
- dapper 自定义数据库字段和代码中Model字段不一致时候的mapping方法
- postgreSql 中自定义的字段和数据库关键字重名
- 在向"带有自增字段的数据库表"中插入数据时,自定义"该自增字段"的数据
- 关于自定义代码生成器(续)---SQL2008查询数据库字段主键,外键,唯一键等相关属性
- Oracle 数据库 列 字段 相关操作
- 1.读取excel文件,将输入存储到数据库中(JXL) 2.完成商品的检索相关功能 1.根据分类,显示分类下所有的商品信息,按照库存量从低到高排序(提供补货依据) 2.模糊搜索,根据商品信息(名
- ExpandInfo 类,可向数据库中一个字段保存多个自定义信息
- 自定义数据库物理表中各列字段的名称
- Log4net 自定义信息(字段)存入数据库