查了一些资料,http://search.csdn.net/Expert/topic/562/562028.xml?temp=3.306216E-02
(以下引用一些上贴的内容)
现在想,在设计表的时候,如果想要灵活一些。结构扩展性要好一些,
就要采用,
例如:
>>通常我们设计数据库表的时候是这样的
ID 操作员姓名 操作员性别 出生年月 部门ID
1 张三 男 1974.1 1
2 李四 男 1975.6 5
改为
ID 项目名称 值
1 操作员姓名 张三
2 操作员姓名 李四
3 操作员性别 男
4 操作员性别 男
5 出生年月 1974.1
6 出生年月 1975.6
7 部门ID 1
8 部门ID 5
>>个人意见:这种设计确实在一定的情况下比较有用. 例如, 做一个法院系统, 其中的案件, 原告, 被告, 律师等是主要的对象, 数据量会很大, 属性比较明确, 并且在做report时, 会大量的用到他们之间的relationship, 所以这时候就要对将他们映射成每一个table, 他们的属性映射成table中的field. 相对的, 在这个系统中也有很多东西是变动较大, 并且数据量较少, 如法官信息, 法庭信息, 在不同地区会有不同的情况, 既属性不确定. 那就这样设计, 增加灵活性.换句话说, 你不应该为你的系统中的每种对象都单独设计一个table, 那样你会发现, 一个很小的系统都会有几十, 上百个table.
>>有位前辈曾教我,设计表时,有一个必要的原则是:
“字段是昂贵的,而属性是免费的”
当表中字段很多,报表与报表之间有很多也没有什么必然的联系,也就是你说的这种情况时,可以考虑用属性取代字段
比如:
有字段:A,B,C,D,E,F,G,H,I,J,K,L,M,N
设计一个表,只有两个字段:CodeName, CodeValue
CodeName下填A,B,C,D……这些字段名称,在CodeValue下填写他们相应的值
这样既避免了大量字段造成的数据冗余,又增强了数据库的灵活性。
当然,实际设计时只有CodeName, CodeValue两个字段是不行的,还要填加一些相应的字段以
便于跟其他表的连接,这也需要在数据完整性和数据冗余问题上多考虑一些
我做过一些数据库,遇到这种问题都这么搞
希望对你也有些帮助
这种做法太土,显然没有关系数据库的概念,完全是凭自己小聪明在做事情,照你这么做,我干脆在数据库里就放一张表字段为TableName,
CodeName, CodeValue,再建一张表描述表的结构,所有的数据都可以放进去了。“字段是昂贵的,而属性是免费的”这个在设计上实际不用考虑,以反映业务为主。