2009-08-06 46 views
0

编辑:简而言之,应该在具有复杂对象的insertselect脚本上使用什么策略(例如,两个选择调用,每个调用一个表;每个表有一个选择调用)?将复杂对象插入到SQL数据库中时,对象何时应该分解为其尊重的表?

我们有一个数据库插入(PostgreSQL的),包括被序列化(文本XML)对象的列表,并把它变成一个细胞在一排之间正常的字符串和这样。我们想用这些列表创建一个新的表格,其中引用回到原始项目的关键字。物体应该从哪里分离出来?我不认为这是可能的SQL查询,但如果是这样,将是理想的。目前我们最喜欢的地方就在我们建立我们的JDBCProcedures之前。

string name 
int id 
List<sub-objects> 

,目前这个被存储在一个数据库架构,如:

name varchar(20) 
id int 
subObjs text [or other character type big enough to hold the serialized XML] 

回答

0

我们结束了分裂insert成两个电话(一个为主要对象,一个子对象),这样每个表都拥有自己的插入,但创造了单select这样我们就可以使用外键的优点在查询中。

0

请提供对物体的结构稍微更多的信息和澄清你的问题。这是不完全清楚你在这里问的。

这就是说,让我尝试采取刺: 如果你在Java代码中的对象与结构有点像这样:

string name 
int id 
object[] list_of_sub-objects 

,目前这个被存储在像DB模式:

name varchar(20) 
id int 
subObjs text [or other character type big enough to hold the serialized XML] 

那是有关的权利?

然后你的问题是:

我们想创建一个新表与引用这些列表返回到原始项目的关键。 物体应该从哪里分离出来?我不认为这是可能的SQL查询,但如果是这样,将是理想的。

当你说在你现有的系统中列表属性项是“序列化”的时候,你的意思是XML吗?看起来像SQL中的XML解析本身对于PostgreSQL来说是still in development,并且无论如何,如果你不知道如何编写类似的东西,可能会遇到很多麻烦。

但是你已经有代表在非序列化方式的对象的应用程序代码。您可以在执行迁移的应用程序代码库中编写函数。 根据您现有的模式将旧数据库表中的记录加载到应用程序对象中,然后根据您的新模式将它们写回到新的数据库表对中。

这在概念上将问题简化为您可以用伪代码表示的内容,即“我如何将旧对象架构映射到新数据库架构?”

我希望这有助于!如果你能澄清你的结构,我可能会为我在这里提出的解决方案提供一些更具体的伪代码。

+0

您的结构是正确的,我将它添加到问题中。移动旧数据并不重要,因为我们尚未投入生产。具体来说,我是在问'insert“和'select'技术,我会在这个问题中增加更多细节。 – Adam 2009-08-10 15:46:03

相关问题