Im relationalen Datenbankmodell sind Tabellen über „Schlüssel“ verbunden; der Primärschlüssel ist eine innerhalb der Tabelle für jeden Datensatz eindeutige ID; diese eindeutige, primäre ID kann von einer anderen Tabelle referenziert werden. Diese Referenz zu einer ID in eine andere Tabelle nennt sich „Fremdschlüssel“.

image018.gif

ER-Diagramm

Beispiel: In einer Datenbank für die Verwaltung von Benutzern soll die Zuordnung zu einem Land über einen zweistelligen Länder-Code (z.B. ‚DE’ für Deutschland) abgebildet werden. Die Länder werden mit Code und Bezeichnung in einer eigenen Tabelle gespeichert und haben den Länder-Code als eindeutige ID (Primärschlüssel). Die Nutzerdaten-Tabelle referenziert nun diesen Primärschlüssel der Ländertabelle mit einem diesem Schlüssel entsprechenden Wert. Für den Eintrag dieses referenzierten, also entfernten bzw. fremden Schlüssels in die Nutzerdaten-Tabelle ist in der Nutzerdaten-Tabelle eine entsprechende Fremdschlüssel-Spalte vorgesehen. Damit stehen beide Tabellen in einer „Relation“.

Diese Relationen lassen sich auch über die XML-Konfiguration des ZMSSqldb-Objektes abbilden: Dazu wird der zu referenzierende Tabellenname (tablename) und diejenige Tabellespalte bezeichnet, die als Fremdschlüssel (fieldname) referenziert wird. Das Beispiel zeigt ein Tabellen-Item (Spalte, columns-item), das als Select-Liste abgebildet wird und seine Werte aus einer referenzierten Länder-Tabelle erhält:

So sieht das entsprechende Redaktions-Interface aus:

image019_thumbnail_ger.jpg

Konfigurations-Code für das Datenmodell der oben dargestellten Einfachauswahl-Liste „Länder“:

...
  <item>
    <dictionary>
      <item key="id">country</item>
      <item key="label">Country</item>
      <item key="fk">
        <dictionary>
          <item key="tablename">countries</item>
          <item key="fieldname">countryid</item>
          <item key="displayfield">title</item>
        </dictionary>
      </item>
    </dictionary>
  </item>
...

Alternativ ist es auch möglich bei fehlender Bezugtabelle willkürliche Auswahlwerte vorzugeben. Über das option-Element lassen sich Werte explizit vorgeben, ohne dass diese in einer Datenbank-Tabelle stehen müssen:

 <item>
  <dictionary>
    <item key="id">lang</item>
    <item key="label">Language</item>
    <item key="hide" type="int">1</item>
    <item key="fk">
      <dictionary>
        <item key="options">
          <list>
            <item>
              <list>
                <item type="int">1</item>
                <item>English</item>
              </list>
            </item>
            <item>
              <list>
                <item type="int">2</item>
                <item>German</item>
              </list>
            </item> 
          </list>
        </item>  
      </dictionary>
    </item>
  </dictionary>
</item>