Am Beispiel einer Ärzte-Datenbank lässt sich ein weiteres wichtiges Prinzip von Relationen erläutern: ein Arzt kann mehrere fachliche Zusatzqualifikationen (sog. Zusatzbezeichnungen) besitzen. Die Zahl der möglichen Zusatzbezeichnungen ist begrenzt. Um dieses n:m-Verhältnis abzubilden, wird im Datenbankmodell üblicherweise eine Zwischentabelle (intersection) eingeführt. Dort kann der Datensatz eines Arztes in Form seines Fremdschlüssels mehrfach vorkommen (bzw. referenziert werden) und diese Datensätze referenzieren wiederum (auch per Fremdschlüssel) jeweils einen Eintrag in der Tabelle der Zusatzqualifikationen:

image021.gif

Beispiel eines ER-Diagramms für Ärzte mit Zusatzbezeichnungen

zmssql2_PARTIAL

Das Interface präsentiert die Tabellen in einem integrierten Interface (Ausschnitt):

Der folgende Konfigurations-Code für das hier darstellte Interface auf dem weiter oben abgebildeten Datenmodell zeigt ausschnittshaft definiert die relevanten Sektionen für die Abbildung einer n:m-Beziehung:

  1. das Mehrfachauswahl-Element „Zusatzbezeichnung“ wird in die Liste der Datenfelder der Tabelle tcustomers ergänzt; hier mit der (willkürlichen) ID zusatzbez; über ein Element index bekommt dieses zusätzliche Element eine Platzierung in der Reihenfolge aller Interface-Elemente der Tabelle zugewiesen (im Beispiel-Code die Position 4). Der Bezug zur intersection-Tabelle geschieht durch ein per multiselect geschachteltes fk-Element bzw. durch die dort im tablename-Element genannten intersection-Tabelle tcusttgb.
  2. Die intersection-Tabelle muss gesondert definiert werden; hier werden die beiden fk-Beziehungen wie üblich abgebildet. Der type intersection verhindert, dass die Tabelle im Interface in der Tabellenliste erscheint bzw. direkt bearbeitet werden kann.
<list>
<!-- ########################################
     ### TCUSTOMER
     ######################################## -->
<item>
  <dictionary>
    <item key="id">tcustomers</item>
    <item key="label">Kunden</item>
    <item key="columns">
      <list>
<!—...[1]...-->
	<item>
	  <dictionary>
	    <item key="hide" type="int">1</item>
	    <item key="id">zusatzbez</item>
	    <item key="index" type="int">4</item>
	    <item key="label">Zusatzbezeichnung</item>
	    <item key="multiselect">
	      <dictionary>
	        <item key="fk">cust_id</item>
           <item key="tablename">tcusttgb</item>
         </dictionary>
	    </item>
	  </dictionary>
	</item>
<!-- ...[/1]...-->
      </list>
    </item>
  </dictionary>
</item>
<!-- ...[2]...-->
<!-- ########################################
      ### tcusttgb INSECTION
      ######################################## -->  
<item>
  <dictionary>
    <item key="id">tcusttgb</item>
    <item key="type">intersection</item>
    <item key="columns">
      <list>
        <item>
          <dictionary>
            <item key="id">user_id</item>
            <item key="label">Kunde</item>
            <item key="fk">
               <dictionary>
                 <item key="tablename">tcustomers</item>
                 <item key="fieldname">cust_id</item>
                 <item key="displayfield">user_name</item>
               </dictionary>
             </item>
          </dictionary>
        </item>
        <item>
          <dictionary>
            <item key="id">tgb_id</item>
            <item key="label">Zusatzbezeichnung</item>
            <item key="fk">
               <dictionary>
                 <item key="tablename">tzusatzbez</item>
                 <item key="fieldname">tgb_id</item>
                 <item key="displayfield">tgb_name</item>
               </dictionary>
             </item>
          </dictionary>
        </item>
      </list>
    </item>
  </dictionary>
</item>
<!-- ..[/2]....-->
</list>