MySQL:SQL Server 的 HierarchyId 数据类型的替代解决方案

Sah*_*hah 5 mysql sql sql-server hierarchy hierarchyid

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

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

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

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

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

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

谢谢...

Shi*_*ari 6

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

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

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

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


Gre*_*eek 1

据我所知,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/