Inbesondere bei Personen-Datenbanken aus dem wissenschaftlichen Umfeld besteht oftmals der Bedarf, die Mitarbeit einer Person an diversen Arbeitspaketen (workpackages) sowie deren für das jeweilige Arbeitspaket spezfische Rolle abzubilden.

Im Folgenden wird eine reale Datenbank als Beispiel herangezogen, die für ein internationales Forschungsnetz im Einsatz ist. Das Übersichtsbild (übernächste Grafik, ER-Modell) veranschaulicht das oben genannte Beziehungsgefüge im rot markierten Bereich. Um ein möglichst einfaches und effizientes Interface zu erhalten, erzeugt das ZMSSqldb-Objekt auf Basis einer entsprechenden Modellierung per XML folgendes Eingabe-Interface:

ZMSSQLDB_multmultiselectInterface_thumbnail_ger.jpg

Für jedes Arbeitspakt kann eine Rolle definiert und per Klick auf den [+]-Button in die obere Übersichtsliste transferiert werden. Auf diese Weise lassen sich einer Person viele Arbeitspackete samt Rolle, welche die Person im jeweiligen Arbeitspaket innehat, in Form entsprechender Wertepaare festlegen. Mit dem [-]-Button können einzelne Wertepaare wieder entfernt werden.

ELNusers_multmultiselectER_thumbnail_ger.jpg

Datenbank-Modell für das Nutzer-Management eines Forschungsnetzes. Der rot umrandete Bereich markiert diejenigen Tabellen, welche die n:m-Beziehung einer ‚person’ per intersection-Tabelle (person_has_workpackages) zu multiplen ‚workpackages’ vermittelt. Jede dieser Beziehungen ist wiederum durch eine Relation zur ‚role’-Tabelle erweitert, um die Rolle, welche die Person im Arbeitspaket inne hat, zu referenzieren.

<list>
<!-- ########################################
     ### Table person
     ######################################## -->
<item>
  <dictionary>
    <item key="id">person</item>
    <item key="label">Person</item>
    <item key="columns">
      <list>

        <item>
          <dictionary>
            <item key="id">workpackages</item>
            <item key="index" type="int">36</item>
            <item key="hide" type="int">1</item>
            <item key="label">Workpackages</item>
            <item key="multimultiselect">
              <dictionary>
                <item key="fk">person_idperson</item>
                <item key="tablename">person_has_workpackage</item>
                <item key="tables">
                  <list>
                    <item>
                      <dictionary>
                        <item key="fk">workpackage_idworkpackage</item>
                        <item key="tablename">workpackage</item>
                        <item key="fieldname">idworkpackage</item>
                        <item key="displayfield">value_eng</item>
                        <item key="label">Workpackage</item>
                      </dictionary>
                    </item>
                    <item>
                      <dictionary>
                        <item key="fk">role_idrole</item>
                        <item key="tablename">role</item>
                        <item key="fieldname">idrole</item>
                        <item key="displayfield">value_eng</item>
                        <item key="label">Role</item>
                      </dictionary>
                    </item>
                  </list>
                </item>
              </dictionary>
            </item>
          </dictionary>
        </item>
...
      </list>
    </item>
  </dictionary>
</item>
...
<!-- ########################################
     ### Table person_has_workpackage INSECTION
     ######################################## -->
<item>
  <dictionary>
    <item key="id">person_has_workpackage</item>
    <item key="type">intersection</item>
    <item key="columns">
      <list>
        <item>
          <dictionary>
            <item key="id">person_idperson</item>
            <item key="label">Person</item>
            <item key="fk">
              <dictionary>
                <item key="tablename">person</item>
                <item key="fieldname">idperson</item>
                <item key="displayfield">lastname</item>
              </dictionary>
           </item>
          </dictionary>
        </item>
        <item>
          <dictionary>
            <item key="id">workpackage_idworkpackage</item>
            <item key="label">Workpackage</item>
            <item key="fk">
              <dictionary>
                <item key="tablename">workpackage</item>
                <item key="fieldname">idworkpackage</item>
                <item key="displayfield">value_eng</item>
              </dictionary>
            </item>
          </dictionary>
        </item>
      </list>
    </item>
  </dictionary>
</item>
...
</list>