Fragebögen

Lösung

Die Tatsache, dass jedes Kriteriumfeld nur zwei Zustände haben kann (markiert oder nicht markiert), eröffnet die Möglichkeit, die Kriterien als Bitmuster zu verwalten:

 

Ein gesetztes Bit (1) bedeutet, das Kriterium ist ausgewählt; ein gelöschtes Bit (0) bedeutet, das Kriterium ist nicht ausgewählt. Bitmuster können als Integerwerte gespeichert werden, wobei je nach Datenbanksystem ein Feld vom Typ Integer entweder 2 oder 4 Byte Speicherplatz benötigt (16 oder 32 Bits). Bei MS-Access besteht der Datentyp Integer aus 2 und der Datentyp Long Integer aus 4 Bytes. Beim MS-SQL Server ab Version 7.0 gibt es den Typ Int, welcher 4 Bytes beansprucht und somit max. 32 Kriterien aufnehmen kann (Bit 0-31). Bitmuster können in Dezimalwerte umge-rechnet und wie normale, ganze Zahlen verwendet werden. Allerdings gilt es zu beachten, dass wenn das höchstwertige Bit (Bit 15 bzw. 31) gesetzt ist, negative Zahlen resultieren (2er-komplement Code). Daher sollte auf dieses Bit verzichtet werden (ausser für Cracks, die immer alles ganz genau wissen wollen).

Um Bitmuster in Dezimalzahlen umzurechnen, wird am einfachsten der Windows-Taschenrechner in der naturwissenschaftlichen Ansicht verwendet (bei LINUX und MAC-OS wird es vermutlich auch so etwas geben). Dort können Binärwerte in andere Zahlensysteme und umgekehrt umgerechnet werden.

Das manuelle Umrechnen geht folgendermassen:

Dezimalzahl = 20 + 21 + 22 + 23 + 24 + 25 + 26 + ... + 214
(auf 215 wird verzichtet)

Der Exponent (0-14) entspricht der Bitposition, wobei nur Glieder mit gesetztem Bit in die Berechnung einfliessen.

Beispiel:

Die Binärzahl 1000011 entspricht der Dezimalzahl 67 = 20 + 21 + 26 

Zu beachten ist, dass die Bitpositionen bei Binärzahlen immer von rechts nach links gezählt werden.

Für das Verwalten von Fragebögen wird nun folgende Tabelle benötigt:

Fragebögen (FBNr, Frage1, Frage2)

Die Attribute "Frage1" und "Frage2" sind vom Typ Integer und können abhängig vom Datenbanksystem 16 oder 32 Bits aufnehmen (Dezimalzahlen von -32768 bis +32767 bzw. -2147483648 bis +2147483647).

Doch wie können diese Bitmuster nun in Abfragen verwendet werden?

Dafür muss das Datenbanksystem es zulassen, dass die logischen Operatoren AND, OR und NOT für bitweise Vergleiche verwendet werden können (machen alle mir bekannten Datenbanksysteme; allerdings werden unter Umständen andere Bezeichner verwendet, z.B.: & anstelle von AND). Um nun Abfragen zu entwerfen, die Datensätze nach bestimmten Bit-mustern ausfiltern, sind Kenntnisse der Boolschen Algebra notwendig. Diese kann man sich aneignen, wenn man beispielsweise bei www.yahoo.de den Suchbegriff "Boolsche Algebra" verwendet und etwas umhersurft oder in der Datenbankdokumentation herumstöbert. Die Abfrage aus dem Kapitel "Problem" sieht nun folgenderweise aus:

SELECT FBNr
FROM Fragebögen
WHERE Frage2=67;

Der Wert 67 entspricht der Binärzahl 1000011 (siehe Bitmuster-Grafik).

Falls man alle Fragebögen haben möchte, in denen die Farben Rot, Grün und Orange angekreuzt worden sind (auch wenn noch zusätzliche Farben angekreuzt worden sind), dann sieht die Abfrage folgendermassen aus:

SELECT FBNr
FROM Fragebögen
WHERE (Frage2 AND  67)=67;

Beim MS-SQL Server ab Version 7.0 müsste die gleiche Abfrage folgender-massen aussehen:

SELECT FBNr
FROM Fragebögen
WHERE (Frage2 & 67)=67;

Oder: Alle Fragebögen, bei denen mindestens eine der Farben Rot, Grün oder Orange angekreuzt worden sind:

SELECT FBNr
FROM Fragebögen
WHERE (Frage2 AND 67)<>0;

Oder: Alle Fragebögen, in denen keine der Farben Rot, Grün oder Orange angekreuzt worden sind:

SELECT FBNr
FROM Fragebögen
WHERE (Frage2 AND 67)=0;

Und schliesslich als Abschluss: Alle Fragebögen, bei denen alle Farben mit Ausnahme von Rot, Grün und Orange angekreuzt worden sind:

SELECT FBNr
FROM Fragebögen
WHERE ((NOT Frage2) AND 67)=67;

Schlussbemerkung

Die hier beschriebene Lösung mit den Bitmustern, welche als Dezimalzahlen abgelegt werden, hat folgende Vorteile:

  • speicherplatzsparend
  • effizient und schnell bei Abfragen

Doch es gibt auch Nachteile:

  • schwer verständlich für normale Benutzer, die Berichte erstellen oder Auswertungen machen wollen
  • viel Programmieraufwand bei Eingabemasken

Ob es sich rentiert, mit Bitmustern zu arbeiten, hängt davon ab, wo der Schwerpunkt bei der Applikation liegt. Falls es nur darum geht, Fragebögen zu archivieren, um diese bei Bedarf wieder auszudrucken, ist die beschriebene Variante im Kapitel "Problem" weniger aufwendig. Wenn aber komplizierte Auswertungen gemacht werden sollen, führt kein Weg an den Bitmustern vorbei.

Es gilt auch hier:

Je einfacher für den Benutzer, desto komplizierter für den Program-mierer!