代码之家  ›  专栏  ›  技术社区  ›  asmaier

如何改进我的LDAP模式?

  •  2
  • asmaier  · 技术社区  · 15 年前

    我有一个OpenLDAP数据库,它保存了一些项目对象

    dn: cn=Proj1,ou=Project,ou=ua,dc=org
    cn: Proj1
    objectClass: top
    objectClass: posixGroup
    member: 001ag
    member: 002ag
    System: ABEL
    System: PCx
    Budget: ABEL:1000000:0.3
    Budget: PCx:300000:0.3
    

    可以看出,预算属性是一个“:”—分隔的字符串,其中第一部分包含预算所属系统的名称,第二部分包含一些预算(可能每个月都会更改),最后一个条目是该系统预算的转换因子。

    看到这一点,我认为这是糟糕的数据库设计,因为属性值应该始终是原子的。但是如何在LDAP中改进这一点,以便我可以直接执行ldapsearch或直接ldapmodify系统“abel”的预算,而不是编写脚本,这将需要解析和拆分“:”-分隔字符串?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Brian Kintz    14 年前

    最好是尽可能多地将事物分组,直到你能找到单独的可区分元素,在你的例子中,这就是系统。正如您已经认识到的,当您有多个系统时,在数据库BE项目中拥有最小的元素是一个问题。

    我会在主项目组中为每个项目设置一个子组,也就是:

    - ou=Project
       + ou=proj1
       + ou=proj2
       + ou=proj3
    

    在每一个属性中,您都可以有一个“成员”或“系统”的对象,以更容易区分的属性为准。为了一个例子,我假设“成员”是更好的选择。按照这个想法,在每个子组中,都会有这样的对象:

     - ou=Project
        - ou=proj1
           - dn: cn=sys1,ou=proj1,ou=Project,ou=ua,dc=org
             cn: sys1
             objectClass: top
             objectClass: posixGroup
             member: 001ag
             System: ABEL
             Budget: 1000000:0.3
    
           - dn: cn=sys2,ou=proj1,ou=Project,ou=ua,dc=org
             cn: sys2
             objectClass: top
             objectClass: posixGroup
             member: 002ag
             System: PCx
             Budget: 300000:0.3
       + proj2
       + proj3
    

    现在,每个系统都是自己的实体,但项目仍然作为一个整体分组在一起。