用户在运行时添加自定义字段是一个很常用的功能。通常一个字段对应数据库表的一列。
我们老的做法是在表中预留100个不含特定意义字段。这个方法有如下缺点:
1,限制了自定义字段的数量,只能有100个。
2,一个自定义字段同往往只为部分用户所用,用不上这个字段的用户的记录,只能把相应的列空着。这样导致了表中预留列利用不充分。本来100个预留列完全够用,被几个用户一分,就不够用。
可以这样考虑:
设计成两个表:
基本信息表, 扩展属性表
通过主键关联, 结合视图实现查询, 结合视图触发器实现易操作性
对于扩展属性表, 可以是简单的横向展开.
也可以是纵向的属性:
基本信息ID 属性名称 属性值
查询的时候, 通过交叉表的处理把扩展属性显示为横向即可.
这样的好处是扩充什么的都很方便, 只是数据类型的控制得下点功夫
如果你用sql 2005, 那么个人觉得不需要在设计上下太多功夫, 直接设计一个xml类型的列来存储扩展属性就行了.