我有一个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”而不是编写脚本,这将需要解析并拆分“:” - 分隔的字符串?
答案 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
现在每个系统都是自己的实体,但项目仍然整体组合在一起。