【问题标题】:MySQL: Alternate solution of SQL Server's HierarchyId datatypeMySQL:SQL Server HierarchyId 数据类型的替代解决方案
【发布时间】:2014-07-02 07:46:22
【问题描述】:

我当前的应用程序是在JAVA 中的SQL Server 2008 服务器中使用Hibernate 构建的,并且我在数据库中的部门层次结构中使用了HierarchyId 数据类型。

我编写了 SQL 查询来处理 HierarchyId 数据类型。而且我还有n-Level的部门树结构。

现在我想根据业务需求将我的数据库服务器从 SQL Server 2008 更改为 MySQL

经过可行性检查后,我提出了我的整个应用程序将迁移到 MySQL 数据库服务器的解决方案,但 HierarchyId 数据类型除外。

所以我的主要挑战是找到HierarchyId 数据类型的替代解决方案,而编码变化最小。

在我的数据库中实现部门层次结构的最佳方式是什么?

谢谢...

【问题讨论】:

    标签: mysql sql sql-server hierarchy hierarchyid


    【解决方案1】:

    当我们的团队决定从 MS-SQL 迁移到 MySQL 时,我遇到了类似的情况。我们通过以下步骤解决了这个问题:

    1. 在 MS SQL 的同一个表中添加了 varchar(100) 类型的列。
    2. 使用hierarchyid.ToString() 函数将hierarchyid 从十六进制值转换为字符串,并使用计算列功能将其保存在新创建的列中。例如。 0x58 -> "/1/", 0x7CE0 -> "/3/7/"。
    3. 实体的级别等于 no-of '/''s - 1。
    4. 这些列可以迁移到 MySQL。
    5. IsDesendantOf() 和 is 方法已替换为与 '%' 连接的字符串的 LIKE 函数。

    因此我们摆脱了 MySQL 中的 hierarchyid 功能。

    每当我们遇到这样的问题时,我们只需要问自己,如果我们使用的工具没有提供此功能,我们会怎么做。我们通常最终会得到最佳答案。

    【讨论】:

      【解决方案2】:

      据我所知,Mysql 没有等价物,但您可以将相同的数据存储在 varchar 中。

      对于涉及 HierarchyId 的操作,您可能必须自己实现它们,可能是用户定义的函数或存储过程。

      sqlserver 所做的类似于存储层次结构的“物化路径”方法。 mysql 中的一个例子可以在http://www.cloudconnected.fr/2009/05/26/trees-in-sql-an-approach-based-on-materialized-paths-and-normalization-for-mysql/看到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-13
        • 2016-10-24
        • 1970-01-01
        • 2020-08-29
        • 1970-01-01
        相关资源
        最近更新 更多