5

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

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

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

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

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

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

谢谢...

4

2 回答 2

6

当我们的团队决定从 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 功能。

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

于 2016-05-03T09:41:31.103 回答
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/

于 2014-07-02T09:58:59.113 回答