2010-06-08 47 views
2

我有一個OpenLDAP的數據庫,並認爲像如何改進我的LDAP模式?

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或直接修改系統「ABEL」的預算而不是編寫一個腳本,這將不得不解析和拆分「:」分隔的字符串?

回答

2

最好將組件分解爲儘可能多的組件,直到您找到可單獨區分的元素(在您的情況下爲Systems)。正如你已經意識到的那樣,擁有數據庫中最小的元素時,當你有多個系統時,Project是一個問題。

我會把子組爲主營項目組內的每個項目,又名:

- 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 

現在每個系統是其自己的實體,但該項目仍聚集在一起成爲一個整體。

+0

+1好的觀點。 =) – 2010-06-16 13:19:20

+0

謝謝!總是很高興知道某人同意哈哈 – 2010-06-16 14:07:26

+0

對於我的情況「系統」是更加可區分的屬性,因爲每個系統都應該擁有所有成員。但我認爲我明白你的意思,所以我將使用具有cn = ABEL的子羣,ou = proj1,ou = Project,ou = ua,dc = org,cn = PCx,ou = proj2,ou = Project,ou = UA,DC =有機謝謝您的回答。 – asmaier 2010-06-21 13:15:55