数据库设计存储方案征集..

seadaughter 2007-01-08 11:17:37
需求是这样的,需要存储的对象的元数据信息是动态的,例如
"书本"这样一个对象相关的元数据可能有:
A: Name(名字)、 Number(号码) 、ISBN(序号)
也可能是:
B: Author(作者)、Pages(页码)、Publisher(出版商)
那么该用什么方式存储?目前想到的法子是在数据库中设计一个表.表有两个字段
1、ID 2、XML
那么存储一个对象的例子如下
ID=1
XML=
<Name>Thinking In Java</Name>
<Number>1223</Number>
<ISBN>121212-23232</ISBN>

当元数据更改了(例如从A改为B了)..那么先前已经存储的对象依然有效,只需要在数据库中继续添加对象,例如
ID=2
XML=
<Author>Song Liang Yun</Author>
<Pages>789</Pages>
<Publisher>Spring</Publisher>

但是上述设计存在一个问题..例如我要查找作者为Song Liang Yun的对象,则需要从数据库中先提取XML字段,再一个一个的查找...
这样貌似不太好,大家有什么更好的方案?例如用已有的XML数据库之类???? 具体有什么推荐?分数不够再加。。

...全文
388 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvcheng606717 2007-01-16
  • 打赏
  • 举报
回复
Create table BOOK(BookID int,BookName varchar(100))
insert BOOK
select 1,'book1'
union all
select 2,'book2'
------------------------
Create table BOOKATTR(BookID int,AttrName varchar(100),AttrValue varchar(100))
insert BOOKATTR
select 1,'Name','Thinking In Java'
union all
select 1,'Number','1223'
union all
select 1,'ISBN','121212-23232'
union all
select 2,'Author','Song Liang Yun'
union all
select 2,'Pages','789'
union all
select 2,'Publisher','Spring'


select AttrName,AttrValue
from BOOKATTR
where BookID = (select BookID
from BOOKATTR
where AttrName = 'Author' and AttrValue = 'Song Liang Yun')
for xml auto, elements

--得到-----------------------------------
<BOOKATTR>
<AttrName>Author</AttrName>
<AttrValue>Song Liang Yun</AttrValue>
</BOOKATTR>
<BOOKATTR>
<AttrName>Pages</AttrName>
<AttrValue>789</AttrValue>
</BOOKATTR>
<BOOKATTR>
<AttrName>Publisher</AttrName>
<AttrValue>Spring</AttrValue>
</BOOKATTR>

---------------------------------------
现在我们需要一个xstl转换成下列格式就可以了:)
<BOOKATTR>
<Author>Song Liang Yun</Author>
<Pages>789</Pages>
<Publisher>Spring</Publisher>
</BOOKATTR>
lvcheng606717 2007-01-16
  • 打赏
  • 举报
回复
当然也可以分解成属性逐个存为行记录,然后使用FOR XML 的语法读出。

但不论如何一定要有一个标识实体的固定的东西,如书名
实体表 Book (BookID, BookName )
属性表 BookAttr (BookID, AttrName, AttrValue )
然后根据AttrName和AttrValue定位到BookID再生成完整的XML

子陌红尘 2007-01-08
  • 打赏
  • 举报
回复
参考SQL Server 2000中以下部分:"使用 FOR XML 检索 XML 文档"
tmc1703 2007-01-08
  • 打赏
  • 举报
回复
学习
seadaughter 2007-01-08
  • 打赏
  • 举报
回复
谢谢楼上的,我是说除了这种方式,还有其他方式进行么???
比如所外键?
caixia615 2007-01-08
  • 打赏
  • 举报
回复
学习
lvcheng606717 2007-01-08
  • 打赏
  • 举报
回复
如果使用SQL2005,不妨直接存为xml类型,使用XQuery等功能进行查询

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧