不是卖弄,是分享,要是对大家有用的话,最好,没用的话,就当没看见

1,关于数据字典的体会
我做过的项目,都会用到数据字典,像国家/省/市列表,货物的运输方式等等
一般来说,大家都会用一个单独的表来存放这些数据字典对象,但是这样带来的问题是就比须单独撰写维护这些字典对象的代码以及存储过程等等,甚至如果你用流行的ORM,你还得写HBM文件来处理映射.
但实际上,对于字典对象,我们的需求很简单,就是希望列表并允许选择.
而且数据字典对象一般是典型的KEY/VALUE对象,其实不用使用数据表存储,可以直接用引用的字段存储和维护其值,在产生数据字典时,可以使用select distinct 数据字典字段 from 表名 where 数据字典字段<>""来聚集就可以了,例如,公司表中有公司类型一栏,我们就可以用select distinct 公司类型 from company where company<>""来列出所有不同的公司类型,当添加第一个公司时,公司类型列表为空,当然啥类型都列不出,当你输入一个公司类型时,添加一条记录,以后这个字典里就多了一个公司类型,对于余下的记录,在添加时,就可以直接从这个列表中选取.这样,用输入和列表结合,就方便的维护了字典对象,下面是一个例子

2关于表的模向扩展
在建数据表时,表的列数一定是定死了的,很多朋友习惯性的会预留一些列来用于扩展例如,预留出字段field1,field2等等,但是,你不可能预留个十个八个字段吧,再说,对于某些字段,可能一部分记录是需要的,另一部分记录不需要
我的方法是使用第三者表进行扩展,方法是为欲扩展表添加一个GUID列,这一列的值由SQL自动生成GUID来填充,另建一个KEYVALUECONTENT表,这个表只有三个字段
GUID
KEY
VALUE
GUID和KEY共同组成主键
当要对某个表的某个记录进行扩展的时候,就取该记录的GUID值来在KEYVALUECONTENT中创建一条记录,KEY中的值就相当于字段名,VALUE值相当于字段内容,很容易的就可以对记录级别进行扩展,下面是一个例子

但是,上面的扩展,还是仅仅对于单条记录,粒度非常细,灵活度高,但是,对于整表扩展起来,却比较复杂,因为需要每条记录进行KEY/VALUE值的添加,但是,有些时候,整个表都需要扩展出一些字段来,这时候,用上面的方面会很累
但是,我们可以根据相同的原理做如下KEY列表表TABLEKEY:
KEYID
TableID
KEY
(其中KEYID为主键)
对于表中每条记录扩展出来的值,我们用另一个表KEYVALUE来表示:
GUID(记录的GUID值)
KEYID
VALUE
(GUID+KEYID为主键)
这样,我们针对表来定义其需要扩展的字段的架构,然后,用另一个表来记录每一每需扩展记录的扩展字段内容
每一条记录在扩展时,无需去一个一个添加KEY,只需由TABLEKEY表取出所有的KEY,再生成表单即可

如果大家有更好的扩展方法,可以方便的不用更改表架构而扩展表,请赐教与我