如何改进我的LDAP架构?

时间:2010-06-08 10:39:37

标签: optimization schema ldap

我有一个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

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

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

1 个答案:

答案 0 :(得分:2)

最好尽可能多地将事情分成几组,直到你找到可单独区分的元素,在你的情况下是系统。正如您所知,当您拥有多个系统时,拥有数据库中最小的元素是项目是一个问题。

我会为主项目组中的每个项目设置一个子组,即:

- 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

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