Как улучшить мою схему LDAP? - PullRequest
2 голосов
/ 08 июня 2010

У меня есть база данных 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 представляет собой разделенную ":" строку, где первая часть содержит название системы, для которой предназначен бюджет, вторая часть содержит некоторый бюджет (который может меняться каждый месяц), а последняя запись является коэффициентом пересчета для бюджета этой системы.

Видя это, я подумал, что это плохой дизайн базы данных, поскольку значения атрибутов всегда должны быть атомарными. Но как я могу улучшить это в LDAP, чтобы я мог сделать прямой ldapsearch или прямую ldapmodify системы «ABEL» вместо написания скрипта, который должен будет анализировать и разбивать разделенную «:» строку?

1 Ответ

2 голосов
/ 16 июня 2010

Хорошей идеей будет разбить вещи на группы как можно больше, пока вы не перейдете к индивидуально различимым элементам, которые в вашем случае были бы системами. Как вы уже поняли, наличие наименьшего элемента в базе данных 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

Теперь каждая система - это отдельная сущность, но проект по-прежнему группируется как единое целое.

...