代码之家  ›  专栏  ›  技术社区  ›  baris.aydinoz

正在将应用程序配置从Windows注册表迁移到sqlite

  •  0
  • baris.aydinoz  · 技术社区  · 16 年前

    目前,我正在处理标题行中提到的迁移。问题是保存在注册表中的应用程序配置具有类似树的结构,例如:

    X
    |->Y
       |->Z
          |->SomeKey someValue
    W
    |->AnotherKey anotherValue
    

    等等。

    如何在sqlite(或任何其他数据库)中建模此结构?如果你有类似问题的经验,请发邮件。事先谢谢。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Renato Aquino    16 年前

    巴里斯,这种结构类似于目录/文件结构。 您可以使用目录上的简单父子关系和与目录相关的键值对对此进行建模。

    类似的东西

    Directory:
    id integer auto_increment;
    name string not null;
    parent_id integer not null default 0;
    
    Property:
    id integer auto_increment;
    key string;
    value string;
    directory_id integer not null;
    

    通过这个,您可以寻址根目录,搜索父目录_id=0,子目录,方法是查看父目录_id=someid的位置,以及查找目录_id=someid的属性。

    希望这有帮助:)

        2
  •  0
  •   Tom Cabanski    16 年前

    在关系数据库中表示层次结构非常容易。你只是使用自我参照。例如,您有一个类别表,其中名为ParentCategoryID的字段为空(对于叶类别)或父类别的ID。甚至可以设置外键来强制有效的关系。这种结构很容易在代码中遍历,通常是通过递归进行的,但是在编写SQL查询时却很麻烦。

    注册表克隆的一种解决方法是使用注册表项路径作为注册表项。也就是说,有一个条目,其中路径是“x/y/z/somekey”,值是“somevalue”。这将更容易查询,但可能无法按您可能喜欢的方式表达层次结构。也就是说,您将只有值,而不是层次结构的整体结构。

    底线是必须折衷地将具有未知级别数的层次结构映射到关系数据库结构上。

        3
  •  0
  •   newtover    16 年前

    以前海报中提到的自引用表在您想要存储层次结构时很好,当您开始选择树的叶子时,它们就变得不那么吸引人了。

    1. 你能解释一下从配置中检索数据的用例吗?

    2. 您是要一次加载整个配置,还是分别检索每个参数?

    3. 叶节点的深度有多大?

    推荐文章