代码之家  ›  专栏  ›  技术社区  ›  Adam

在将复杂对象插入SQL数据库时,什么时候应该将该对象分解为相应的表?

  •  0
  • Adam  · 技术社区  · 15 年前

    简言之,一个人应该使用什么策略 insert select 具有复杂对象的脚本(例如,两个select调用,每个表一个;一个带有联合的select调用)?

    我们有一个数据库insert(postgresql),它包含一个序列化的对象列表(以文本xml格式),并将其放入普通字符串等中的一行单元格中。我们想用这些列表创建一个新表,这些列表引用回原始项的键。对象应在何处拆分?我认为这在SQL查询中是不可能的,但如果是这样,那将是理想的。目前我们最喜欢的地方是在我们设置JDBC过程之前。

    string name
    int id
    List<sub-objects>
    

    目前它存储在DB模式中,如:

    name varchar(20)
    id int
    subObjs text [or other character type big enough to hold the serialized XML]
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   Skeolan    15 年前

    请提供更多关于对象结构的信息,并澄清您的问题。你在问什么还不完全清楚。

    也就是说,让我试着尝试一下: 如果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解析本身就是一个例子 still in development 对于postgreSQL,无论如何,如果您还不知道如何编写这样的代码,可能会有很多麻烦。

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

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

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

        2
  •  0
  •   Adam    15 年前

    我们最后把房子分开了 insert 分为两个调用(一个用于主对象,一个用于子对象),这样每个表都有自己的插入,但创建了一个 select 这样我们就可以在查询中利用外键的优势。