请问如何建立一个动态的数据库表?
我的思路: (只写出最基本的必要属性)数据表对象表(ID,表名,属性数)
表的属性表(ID,属性名,数据类型,所属表ID)
存储属性值表。(ID,值,属性ID,行ID,所属表ID)
行ID表(ID,数据表的属性表ID)
添加一个数据表:
数据表的属性表(ID=1,表名=test,属性数量=3)
表的属性表
ID,属性名,数据类型, 所属表ID
1 A int 1
2 B String 1
3 C DATE 1
添加一行数据
行ID表
ID,数据表的属性表ID
1 1
2 1
3 1
存储属性值表。
ID, 值,属性ID,所属行ID,所属表ID
1 t1, 1 1 1
2 t2, 2 1 1
3 t3, 3 1 1
4 t21 1 2 1
5 t22 2 2 1
6 t23 3 2 1
7 t21 1 3 1
8 t2 2 3 1
9 t1 3 3 1
查找test的全部数据.
select t.* form 值表 t,数据表对象表 a where t.所属表id=a.id and a.name=test order by t.所属行ID desc;
查找 test表的属性A=t21的数据
select t.* form 值表 t where t.所属行ID in(
select t.所属行ID form 值表 t,数据表对象表 a, 表的属性表 c where t.所属表id=a.id t.属性ID=c.id a.name=test and c.name="A" and t.值="t2")
order by t.所属行id desc;
我现在的问题是,由于属性值是存在同一个表的同一个字段里面。所以如何控制它的数据类型?我能想出的就是存储属性值表里面的“值”这个属性设为varchar(max)
然后通过代码来控制它的类型。
请问有没有更好的办法。或者说有没有一个更好的解决方案?
[ 本帖最后由 zhong2312 于 2012-9-7 23:25 编辑 ]