Relationale Datenbanken unter sich - Ein Anwender-Vergleichstest

Ein häufiges Anwendungsgebiet von Personal Computer ist die Sammlung großer Datenmengen. So ist es auch nicht verwunderlich, daß schon gut ein Dutzend Programme zu diesem Thema existieren. Wir testeten fünf relationale Datenbanken unter GEM, die alle mit deutschem Handbuch geliefert werden. Sie besitzen alle die Mindestfunktionen, die für einen professionellen Einsatz erforderlich sind.

Mit Relationen

Was unterscheidet relationale Datenbanken von gewöhnlichen Dateiverwaltungen und was sind die Vorteile eines solchen Systems? Nun soll zunächst geklärt werden, was eine relationale Datenbank ist. Dazu möchte ich Ihnen hier die drei gebräuchlichsten Datenbankstrukturen vorstellen. Ziel bei der Erstellung einer Datenbank ist, neben einer schnellen Zugriffsgeschwindigkeit auf die Daten, vor allem die Integrität der Daten und damit auch die Vermeidung von Redundanz. Integrität bedeutet, daß innerhalb der Datenbank keine Widersprüche oder Fehlinformationen auftreten. Angenommen in einer Datei sind Rechnungsdatei und in einer Auftragsdatei sind Adressen gespeichert und Sie bekommen die Mitteilung, die Adresse von xyz hat sich geändert. Normalerweise müßte man hier nachschauen, wo überall xyz auftaucht und gegebenenfalls korrigieren. Es besteht die Gefahr, Daten zu übersehen (auch bei Computerunterstützung); außerdem enthalten die Dateien Redundanz, d. h. es hat ja eigentlich keinen Sinn eine Adresse mehrfach zu speichern.

Also geht man bei Datenbanksystemen meist den Weg, nur einen Verweis in die Adressdatei zu speichern. So genügt in diesem Fall die Änderung dort.

Bild 1: dBase II mit GEM-Oberfläche

Das hierarchische Modell

Bei diesem Verfahren werden die Daten hierarchisch geordnet. Die Datenbank wird aus einem Baum gebildet. Die Wurzel ist die Datenbank selbst. Sie verzweigt dann zum Beispiel in die verschiedenen Rechnungen. Jeder Rechnungsdatensatz hat nun wieder Unterobjekte, wie zum Beispiel eine Adresse. Da die Beziehung innerhalb der Datenbank nur immer in eine Richtung möglich ist, ergeben sich einige Nachteile. Das Problem der Redundanzspeicherung und der Integrität läßt sich mit einem Trick lösen.

Kommt eine Adresse mehrfach vor, so wird sie nur einmal gespeichert. An allen anderen Stellen stehen virtuelle Datensätze, die intern als Verweis gespeichert werden.

Das Netzwerk Modell

Dieses Verfahren unterscheidet sich in der Art der Datenverknüpfung nicht vom hierarchischen Modell. Es besteht jeweils nur eine Verbindung zwischen zwei Datensätzen. Nur werden hier die Daten nicht in Baumform organisiert, sie sind eher willkürlich miteinander verbunden und bilden so ein Netz miteinander verbundener Datensätze.

und last but not(!!) least, das relationale Modell

Nun endlich zum relationalen Modell. Nachdem Sie bereits einiges über die anderen Verfahren wissen (und über deren Nachteile), nun zur Idee der relationalen Datenbank. Alle Daten werden hierbei in Tabellen untergebracht. Als Überschrift hat diese Tabelle die Merkmalsnamen. Für eine Adressdatei in etwa so:

Name, Vorname, Anrede, Straße, PLZ, Wohnort

Darunter befinden sich dann zeilenweise die Datensätze, sprich die Informationen. Bisher geht so etwas auch mit Karteikarten. Interessant wird es erst, wenn mehrere Dateien gemeinsam eine Datenbank bilden. Eine zweite Datei könnte zum Beispiel alle offenen Rechnungen enthalten, und Verweise in die Adressdatei. Dieser Verweis kann eine Kundennummer, oder irgend ein anderes eindeutiges Merkmal sein. Dies ist dann der 'Schlüssel, der die Verzweigung von der Rechnungsdatei in die Adressdatei ermöglicht.

Bild 2: Befehle lassen sich auch per Maus geben

Beginnen wir mit 'dBase II unter GEM-TOS’

Das von vielen anderen Computern (in erster Linie PC-kompatiblen Rechnern) bekannte dBase II, das schon fast einen Industriestandard für Datenbanken auf PCs darstellt, wurde von Markt & Technik an den Atari ST angepaßt (Bild 1). Dazu wurde das Programm auf der neuen Maschine kompiliert und kommt daher jetzt ohne den zuvor erforderlichen CP/M-Emulator aus. Zusätzlich wurde eine GEM-Oberfläche geschaffen, die es ermöglicht, die meisten dBase-Befehle mit der Maus aufzurufen. Die GEM-Oberfläche setzt die grafisch gegebenen Befehle in englische dBase-Instruktionen um. Da die Möglichkeiten Befehle unter GEM aufzurufen, fast wie bei Superbase sehr weitreichend sind, kann man auch ohne Kenntnis der dBase-Programmiersprache schnell und einfach Datenbanken aufbauen und pflegen.

Die Programmiersprache dBase

Zu dBase II gehört standardmäßig die Möglichkeit, eigene Programme zu erstellen. Neben der Erstellung von Programmen, ist die Sprache auch dazu gedacht, in einem Direktmodus Instruktionen an das System zu geben. Man kann sich auf diese Weise schnell bestimmte Datensätze anzeigen lassen etc. Allerdings lassen sich die meisten der direkt ansprechbaren Funktionen auch über GEM erreichen. Interessant wird diese Sprache erst, wenn man sie in Programmen einsetzt. Sie bietet all das, was andere Programmiersprachen auch bieten, also Variablen, Prozeduren, Programmablaufkontrollbefehle etc.; zusätzlich verfügt sie über diverse Funktionen für die Handhabung von dBase-Dateien. Die Sprache ist so mächtig, daß es für dBase bereits fertige Programme, wie Finanzbuchhaltungen etc. gibt.

All diese Programme können die Datenbankfunktionen von dBase nutzen. Normalerweise ist es am sinnvollsten, sich ein spezielles dBase-Programm zu schreiben; aber auch die direkte Abfrage und Pflege der Datenbank mit dBase ist möglich. Diese direkte Abfrage mit dBase-Befehlen, wurde in der ST-Version dadurch vereinfacht, daß man bestimmte Bedingungen für die Suche/ das Sortieren in der Datenbank mit der Maus bestimmen kann (Bild 2).

Das neue ’Adimens ST V2.1’

Hatten wir bereits in der ST Computer 1/87 die damalige Version von Adimens ST ausführlich vorgestellt, so wollen wir hier auf die Neuigkeiten der Version 2.1 eingehen.

Auf der Systemdiskette der neuesten Adimensversion 2.1 (Bild 3) befindet sich ein unter GEM arbeitendes Programm namens INIT, das die Erstellung neuer Datenbanken extrem vereinfacht. Nach dem Top-Down-Prinzip kann hiermit leicht, mit grafischer GEM-Unterstützung der Aufbau der Datenbank festgelegt werden. Bild 3 zeigt die oberste Ebene beim Entwurf der Datenbank. Hier wird die Verknüpfung der logischen Dateien festgelegt. Der nächste Schritt ist dann die Festlegung des Aufbaus der Dateien (siehe Bild 4). Diese Visualisierung des Vorgangs des Datenbankentwurfs ist sehr vorteilhaft.

Die Entwicklung einer neuen Datenbankstruktur kann von der ersten Minute an, mit dem Rechner erfolgen.

Ansonsten unterscheidet sich die neue Adimens Version von der Version 1.6 durch die neu hinzugekommenen Rechenfunktionen und das Clipboard. Ebensoleicht, wie man eine Auswahl unter den anzuzeigenden Daten (z. B. nur alle Kunden aus PLZ 4) definieren kann, läßt sich nun auch eine Berechnung vornehmen. So kann beispielsweise der Gesamtpreis aus der Anzahl, dem Stückpreis und der Mehrwertsteuer auf Knopfdruck berechnet werden.

Bild 4: Der Maskeneditor von Adimens

Das Clipboard von Adimens 2.1 dient der Zwischenablage von Daten. Da die dort abgelegten Daten im RAM-Speicher gehalten werden, kann auf sie extrem schnell zugegriffen werden.

Insgesamt macht ADIMENS einen hervorragenden Eindruck, der in erster Linie auch durch die durchdachte GEM-Oberfläche zustandekommt (Bild 5). Das Programm bietet auch ohne Programmierung Flexibilität und einfachste Bedienung, wie sie andere Systeme selbst mit aufwendigen Programmen nicht erreichen. Mittlerweile gibt es für Adimens auch fertige Datenbanken zu kaufen. Dann braucht man sich nicht einmal mehr um den Aufbau (die Dateien und ihre Verknüpfung) Gedanken machen.

Bild 5: Das Adimens 2.1 Hauptprogramm

In Vorbereitung: ADI Talk

So wie in dBase eine Programmiersprache existiert, wird es (Mitte November) auch eine Programmiersprache für Adimens ST geben. Die Sprache ist nach Angaben von ADI dBase-kompatibel. W-ir konnten uns bereits bei einer Vorversion von der Sprache überzeugen. Es stellt kein Problem dar, anhand der Standardliteratur Programme für ADI Talk zu erstellen. Schade ist nur, daß bei Verwendung dieser Sprache die GEM-Funktionen, wie das Adimens Exec.Prg sie unterstützt, verlorengehen. ADI-Talk wird für den Atari ST DM 189,- kosten und ermöglicht es, spezielle Anwendungen zu programmieren, für die das Adimens Programm zu flexibel (Fehlbedienung) oder zu unflexibel ist (eigene Programme wie z. B. eine FiBu).

Für ernsthaftere Programmierer gibt es die Adimens Datenbankfunktionen auch als Bibliothek, zur Einbindung in eigene C-Programme, zu kaufen. Bei Verwendung dieser Bibliothek können dann auch wieder die GEM-Funktionen genutzt werden. Das Adimens Exec, also das eigentliche Adimens ST wurde auch mit dieser Bibliothek entwickelt, die sich ADI C-Prog nennt und ca. DM 2000,- inklusive Lizenzgebühr kostet.

’RegentBase’

In Deutschland ist die amerikanische Firma Regent Software leider noch nicht sehr bekannt, dies allerdings zu unrecht. Regentbase besteht aus 5 Teilprogrammen, die durch ein Menüprogramm (Bild 6) aufgerufen werden. Nach der Erstellung einer Datenbank hält man sich im allgemeinen nur noch im Programm BASE.PRG auf. Dieses Programmodul führt selbstgeschriebene Regent Base-Programme aus. Doch soweit ist es noch nicht. Angenommen, man möchte keines der mitgelieferten Beispielprogramme benutzen, so muß zuerst eine Datenbank angelegt werden. Eine Datenbank kann z. B. mit einem mitgelieferten Utility-Programm definiert werden. Die Utility unterstützt die Mausbenutzung, so daß die Definition sehr schnell vorzunehmen ist. Hat man sich eine solche Datei geschaffen, so kann sie aus dem Hauptprogramm BASE bearbeitet werden. Hierfür dient die Sprache SQL, doch dazu später mehr.

Zunächst gibt es da noch eine andere Möglichkeit: Man erstellt mit dem mitgelieferten Editor (Bild 7) ein Programm, daß eine Datenbank anlegt und die Pflege der Daten ermöglicht. Man kann komfortabel eine Eingabemaske generieren, die dann der Endbenutzer verwendet. Hierfür bietet RegentBase auch Buttons an, so daß die erstellte Eingabemaske später auch mit der Maus bedient werden kann. Hat man diese Maske erstellt, so kann man sich zu jedem Feld eine Kennummer angeben lassen und im eigenen Programm leicht über diese Kennummer auf die eingegebenen Daten zugreifen. Wenn man im Programm schreibt %Kennummer, so wird hier automatisch mit dem gerade aktuellen Inhalt des Feldes gearbeitet. Über die Funktion USERS kann das eigene Programm auch Mausklicks entgegennehmen.

Bild 7: ...und der Masken- und Programmeditor von RegentBase

Doch nun zur Programmiersprache selbst. Hier hat sich der Programmierer nicht die 'Mühe gemacht’ eine eigene Sprache zu schaffen, sondern einen Standard integriert: Die in Amerika genormte Abfragesprache SQL.

Was sind Abfragesprachen?

Unter Abfragesprachen versteht man spezielle Sprachen, die nur dem Datenbanknutzer dienen. Mit diesen Sprachen kann man einfach definieren, welche Bedingungen die gesuchten Daten zu erfüllen haben. Zum Beispiel möchte man alle Kunden haben, die im Postleitzahlgebiet 1 wohnen, Atari ST Besitzer sind und mehr als 1000 DM im Monat verdienen, kennenlernen. Dafür möchte man kein langes Programm schreiben, sondern die Bedingungen möglichst ähnlich der menschlichen Sprache eingeben. Solange hierfür keine Systeme mit künstlicher Intelligenz allgemeine Verbreitung finden, verwendet man Abfragesprachen.

SQL oder Sequel

SQL (Structered Query Language = Strukturierte Abfrage Sprache), früher auch unter dem Namen Sequel bekannt, ist eine solche Abfragesprache speziell für relationale Datenbanken. Sie ermöglicht es dem Benutzer nach beliebigen Kriterien die Daten durchsuchen zu lassen. Dabei lassen sich alle Möglichkeiten relationaler Systeme nutzen. Dieser Tatsache ist es wohl auch zu verdanken, daß sich diese Sprache im Großrechnerbereich durchgesetzt hat. Sehr viele große Datenbanksysteme verwenden als Abfragesprache SQL. Regentbase bietet diese Sprache aus dem Profibereich erstmals auf einem PC-Programm für den ST. In der ST-Version stehen nicht nur diese SQL-Standardbefehle zur Verfügung, sondern auch die Kontrollstrukturen, die diese Sprache bietet. So ist es möglich komplette Programme mit Eingaben, Ausgaben, Reportfunktionen etc. einfach zu implementieren. Alle diese Möglichkeiten werden durch mächtige Befehle unterstützt. Die Datenbankfunktionen machten einen ausgereiften Eindruck. Zu bemängeln ist nur, das nicht alle SQL-Befehle integriert wurden. Außerdem traten mit GEM einige geringe Probleme auf. So habe ich es geschafft, daß die Ereignisse falsch abgearbeitet wurden. Selbst nach dem Verlassen des Programmes wurden alle Ereignisse verzögert ausgeführt. Nach ca. 15 Tastendrücken wird die 15 Tasten zuvor betätigte Taste ausgeführt. Ebenso bei Mausklicks. Dies führte zu einem nicht mehr überblickbarem Chaos.

’Superbase’

Bild 8: Diese Abfrage-Definition kann man allein mit der Maus durch Anklicken der Buttons ausfüllen

Von Precision Software kommt der vierte Vertreter der Datenbanken. Das wie Adimens oder dBase schon etwas ältere Programm (alt heißt nicht schlecht!) wurde an den Atari ST angepaßt. Es ähnelt in seiner Anpassung sehr stark der ebenfalls erhältlichen Amiga-Version (Bild 8). Unter dem Fenster befinden sich Tasten, die an ein Bandgerät erinnern. Hiermit kann man entsprechend einem Schlüsselfeld vor/zurückspulen, stoppen und Filterfunktionen aufrufen. Mit dem Filter kann die Anzeige der Datensätze an bestimmte Bedingungen geknüpft werden. Dabei lassen sich die Kriterien in verschiedenen Formularen durch einfaches Anklicken auswählen.

Doch zunächst einmal muß der Aufbau der Datenbank definiert werden. Superbase ist hier recht flexibel. Neben den üblichen Datentypen innerhalb von Dateien erlaubt Superbase auch eine Eingabeüberprüfung. Man kann vordefinieren, welche Werte (Wertebereich) ein Feld haben darf, und Superbase verhindert dann später bei der Benutzung der Datenbank Fehleingaben durch den Benutzer. Ebenso lassen sich Formeln vordefinieren, so daß bestimmte Datensatzelemente automatisch aus den Inhalten der anderen errechnet werden. Schade bei all diesen Definitionen ist, daß nur eine sehr kurze Zeile für die Formeln zur Verfügung steht. Hier hätte man wirklich ein Scrolling spendieren können.

Auch Grafiken...

Bild 9: Superbase kann auch Bilder speichern

...lassen sich mit Superbase verwalten. Es ist das einzige Programm, daß in der Lage ist, innerhalb einer Datenbank einen Bezug zu einer externen Datei, wie z. B. Bildern (Bild 9) herzustellen. So könnten Sie zum Beispiel zu allen Geschäftsfreunden digitalisierte Bilder speichern. Oder Sie speichern zu einem Angebot die entsprechende Konstruktionsskizze.

Von anderen Rechnern kennt man bei Superbase die Möglichkeit, ebenfalls eigene Programme für Superbase zu schreiben. Bei Superbase ST scheinen diese Möglichkeiten auch implementiert worden sein, nur fehlt hier eine Funktion, die Programme zu laden und zu starten. Das Handbuch gibt darin keine Auskunft. Es gibt nur Auskunft über die reservierten, aber nicht benutzbaren Befehle.

Wie steht’s mit der Paperware - entscheidend ist das Handbuch

Für so komplexe Programme wie Datenbanksysteme sind gute Handbücher unerläßlich. So werden bei den getesteten Produkten ohne Ausnahme deutsche Handbücher mitgeliefert. Dabei gehört das dickste Handbuch zu dBase. Die vielfältigen Funktionen und die eingebaute Programmiersprache erfordern ein umfangreiches Nachschlagewerk, das sich in einen atarispezifischen und einen allgemeinen dBase-Teil gliedert. Der atarispezifische Teil beschreibt die Bedienung der neu integrierten GEM-Oberfläche. Den zweiten Teil des Handbuches bildet das Originalhandbuch zu dBase II, wie es in der PC-Version vertrieben wird. Da dieses Buch sehr umfassend ist und alle Funktionen detailiert beschreibt, ist es nicht unbedingt ein Nachteil, daß das Originalhandbuch verwandt wird. Nur die Teile zur Anpassung und Installation des Systems, die beim Atari überflüssig sind, hätte man sich besser sparen können.

Zu Adimens 2.1 gehört nun natürlich auch eine neue Anleitung, die die erweiterten Fähigkeiten beschreibt. Besonders hervorzuheben an dieser Anleitung, ist das ausführliche Tutorial, daß besonders für Einsteiger sehr hilfreich ist. Hier lernt man auf einfache Weise den Umgang mit dem Programm. Man lernt eine Datenbank zu erstellen und mit der mitgelieferten Beispieldatenbank auch schnell die Handhabung und Pflege fertiger Datenbanken. Das Handbuch erscheint gut durchdacht, nur fehlte bei der uns vorliegenden Vorversion noch ein Stichwortverzeichnis. Es ist zu hoffen, das dieser Mangel in den endgültig ausgelieferten Versionen behoben sein wird.

Das Handbuch von Regentbase ist gut gegliedert. Es erläutert erst die Bedienung der Programmodule und dann das Erstellen eigener Programme mit der Sprache SQL. Für SQL ist auch ein alphabetisch sortiertes Verzeichnis mit der genauen Definition angefügt. Für Programmierer wird auch das Format der Dateien erläutert.

Markt und Technik hat das Handbuch zu Superbase geschrieben. Neben der genauen Beschreibung der Bedienungsabläufe enthält das Handbuch auch locker eingestreute Übungen zum Erlernen der Programmbedienung. Durch die mitgelieferten Beispieldateien, auf die auch im Handbuch eingegangen wird lernt man schnell die Benutzung dieses Programmes.

Fazit

Bei allen vier Programmen handelt es sich um leistungsfähige Datenbankprogramme, die in ihren Funktionen weit über die Möglichkeiten vieler einfacherer Dateiverwaltungen herausgehen. Alle Programme wurden ursprünglich auf einem anderen Computer implementiert. Die Anpassungen an den Atari ST und sein GEM sind verschieden gut gelungen.

Mit dem Preis von DM 199,- steht Adimens angesichts seiner Leistungsfähigkeit und Ausgereiftheit relativ konkurrenzlos dar. Besonders einfache Dateiverwaltungen sehen angesichts dieses Preises sehr alt aus. Wem es nicht so sehr auf die Preisdifferenz ankommt, sollte aber auch die anderen Programme in seine engere Wahl ziehen. Teilweise werden hier interessante Ideen geboten, so daß jedes Programm seine individuellen Vorteile und Einsatzgebiete hat. dBase ist zum Beispiel dort interessant, wo bereits fertige dBase-Programme verfügbar sind. Außerdem existiert zu diesem Programm die meiste Sekundärliteratur und das größte Schulungsangebot (zur PC Version). Von diesem Angebot kann allerdings auch der ADI-Talk-Benutzer Vorteile haben, da sich ADI-Talk nur wenig von dBase unterscheidet. Wer Erfahrungen mit SQL hat, oder diese sammeln will, dem ist RegentBase zu empfehlen und Superbase schließlich bietet einzig die Einbindung von Grafik. Ansonsten sei auch noch auf die Tabelle verwiesen, in der alle Programme einander gegenübergestellt werden. Hier werden die Begrenzungen, Standard- und Sonderfunktionen verglichen.

Kurz vor Redaktionsschluß...

...erreichte uns eine Demoversion von STandard Base, einem DBase III kompatiblen Programm. Es ist eine Umsetzung eines Mac-Programmes für den Atari ST. Das Programm (Bild 10) kann unter DBase III entwickelte Anwendungen ausführen und unterstützt das Originalformat, so daß Dateien vom PC übernommen werden können. DBase III ist das Nachfolgeprogramm von DBase II und bietet Erweiterungen in Bezug auf die Größe der verwaltbaren Dateien, die Funktionen und die Bearbeitungsgeschwindigkeit. Das Programm STandard Base wurde wie Adimens komplett in Deutschland entwickelt. Leider konnten wir bis zum Redaktionsschluß nur eine sehr frühe Vorversion testen. Das Konzept des Programmes entspricht in etwa der dBase-Version von Markt & Technik: Auf ein textorientiertes Grundsystem wurde eine grafische Oberfläche aufgesetzt, die es ermöglicht, Befehlsfolgen einfach mit der Maus aufzurufen. Vom Vorbild soll sich STandard Base nach dem Willen der Entwickler, vor allem auch durch die hohe Zugriffsgeschwindigkeit abheben.

(JW)

Bild 10: StandardBase ist dBase III kompatibel

Infobox Datenbanksysteme
Die Merkmale der verschiedenen relationalen Datenbankprogramme im direkten Vergleich:
Produktname: Adimens ST dBase ST RegentBase StandardBase2* Superbase ST
Datenbankfunktionen:
Max. Datenbankgröße 16 MByte Begrenzung 63 MByte1*
Max. Anzahl log. Dat 32 nur durch die 32
Max. Datensatzzahl/Datei 65 535 65 535 Diskkapazität 16 Mio. 16 Mio.
Zeichen/Datensatz 8191 1000 und Bild- 32 K
Felder/Datensatz 32 schirmmasken- 2000 beliebig
Zeichen/Feld 254 große 253
Maximale Anzahl Indizes 191 999
Max. Indexschl.-länge 99
Verwendetes Modif. Modif.
Zugriffsverfahren B^ -Bäume unbekannt unbekannt B ★ -Bäume unbekannt
Benutzeroberfläche:
Eigene Bildschirmmasken ja ja ja ja ja
Anzahl 63 prgabhängig 1 prgabhängig 1
Rechenfunktionen:
Genauigkeit in Stellen 23 10 wählbar 15 wählbar
Reportfunktionen:
Frei editierb. Format nein4 ja ja prgabhängig ja
Datenimport und -exportfunktionen:
Im-/Export von ASCII ja ja ja ja ja
Anderes Format - dBase III dBase III
Zusatzfunktionen:
Bildverarbeitung nein nein nein nein ja
Programmierbar optional ja ja ja siehe Text
Verwendete Sprache DBase II DBase II SQL (Sequel) DBase III Superbase
Paßwortschutz ja prgabhängig3* prgabhängig3* prgabhängig3* ja
Entwickler: ADI Ashton Tate Regent Soft. Knupe GmbH Precision Soft.
Vertrieb: Atari GmbH Markt & Technik H. Haase Knupe GmbH Markt & Technik
6096 Raunheim 8013 Haar 4300 Essen 4600 Dortmund 8013 Haar
Preis DM: 199,- 348,- 249,- 698,- 249,-
’’ GEMDOS unterstützt nur 16 MByte
2) Vorvorversion
3* Kein interner Paßwortschutz, also leicht überwindbar
4) Dafür ASCII-Export zu Word-Plus

Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]