【问题标题】:Relational Database arrays (H2, Java)关系数据库数组(H2、Java)
【发布时间】:2011-02-04 19:03:30
【问题描述】:

关于如何实现数组,我似乎有两种选择,我想知道我应该选择哪一种:

  • 使用 ARRAY 数据类型并(据我了解)有效地将数据对象序列化到数据库中(在我的情况下,它们只是包装的原始类型;不知道另一种方法可以使这项工作)。

  • 为每个数组项使用单独的表和外键映射。

如果您有这方面的经验(尤其是 H2),您会推荐哪个?

【问题讨论】:

    标签: java arrays relational-database choice h2


    【解决方案1】:

    数组字段在数据库中通常是禁忌,它经常违反规范化原则。根据数据的用途,您需要将它们存储在与父表具有 fk 关系的单独表中,或者存储在独立表中(当单个项目可能多次出现时更好,即 n-m 关系代替n-0) 并使用 fk-fk 连接表来处理它们与父表之间的关系。

    在 SQL/JDBC 中,您通常可以将它们作为数组SELECT,具体取决于数据库是否支持 SQL 构造/函数。例如,在 PostgreSQL 中,您可以为此使用 ARRAY() 函数,您可以在 Java/JDBC 中使用 ResultSet#getArray() 获得该函数。

    【讨论】:

    • 是的,我想我不想开始重新编码数据库函数,所以我将按照您的规范化建议并将其映射到一个表。无论如何,我什至不知道用我自己的代码处理数组是否真的有任何改进。
    • H2 实际上确实支持数组。如果可能的话,我也会避免使用它,但只是为了让你知道。
    • @Thomas:是的,几乎所有自尊的数据库都支持 SQL ARRAY 类型。然而,在现实世界中,这几乎适用于任何违反规范化原则的用例。
    • @Thomas 和@BalusC:不一定是坏事。如果您拥有像 postgres 一样强大的数组,那么如果使用得当(例如与存储函数一起使用),那么您将拥有一个很棒的工具
    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2013-10-06
    • 2018-12-05
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多